日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2 中文乱码问题,自定义过滤器通用解决方法

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2 中文乱码问题,自定义过滤器通用解决方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述

在JSP中使用form表單向后臺action中傳遞中文參數(shù),后臺action接收到參數(shù)出現(xiàn)中文亂碼。JSP頁面統(tǒng)一采用了utf-8編碼格式。由于struts2默認采用的編碼為utf-8,根據(jù)官方文檔的提示,編碼格式改為GBK,就能解決中文亂碼。遂改之。但是,改為GBK后仍然出現(xiàn)中文亂碼。很是不解(后來去官網(wǎng)查了一下,發(fā)現(xiàn)這是個BUG)。

環(huán)境描述

服務(wù)器采用tomcat6.0,struts的版本為2.3.12,spring的版本為2.5.6

解決辦法

1.如果你的項目采用了spring,那么請用spring的自帶的過濾器來解決這個問題,你只要在web.xml添加如下代碼(不推薦):

<!-- 利用Spring的Filter解決中文亂碼問題 --><filter> <filter-name>Set Character Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

但是spring3.x之后的版本這個方法就失效了。所以最好的辦法就是自己寫一個過濾器。一個簡單的字符過濾器實現(xiàn)如下(推薦):

package org.felix.common;import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class CharacterEncodingFilter implements Filter {protected FilterConfig filterConfig = null;protected String encoding = "";public void destroy() {filterConfig = null;encoding = null;}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {if(encoding != null && !"".equals(encoding))servletRequest.setCharacterEncoding(encoding);filterChain.doFilter(servletRequest, servletResponse);}public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter("encoding");}}

注意,上面import的javax.servlet 需要你設(shè)置好tomcat的lib庫才能生效,Project->Properties->Java Build Path->Libraries->Add Libraries -> Server Runtime 找到你的Tomcat服務(wù)器確定。

然后你在web.xml中添加下面代碼:

<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.felix.common.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

2.如果你表單提交采用的是get請求.那么請在tomcat的server.xml中添加URIEncoding="utf-8".(注意添加完后清理掉tomcat的緩存)

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

3.不建議采用的辦法,在接收參數(shù)的時候進行轉(zhuǎn)碼(雖然能解決問題,但堅決抵制),例如:

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");

轉(zhuǎn)載于:https://www.cnblogs.com/aleafo/p/4264211.html

總結(jié)

以上是生活随笔為你收集整理的struts2 中文乱码问题,自定义过滤器通用解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。