struts2 中文乱码问题,自定义过滤器通用解决方法
問題描述
在JSP中使用form表單向后臺action中傳遞中文參數(shù),后臺action接收到參數(shù)出現(xiàn)中文亂碼。JSP頁面統(tǒng)一采用了utf-8編碼格式。由于struts2默認(rèn)采用的編碼為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ù)的時候進(jìn)行轉(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据项目开发进度(实时更新)
- 下一篇: mysql触发器更新自己表_mysql触