概述
Java语言虽然天生支持国际化语言,但在项目实践中仍然会遇到中文乱码问题。
Struts2提供的默认过滤器虽然可在一定程度上支持编码处理,但过滤器的配置不当或JSP页面编码不当,中文乱码问题仍会出现。
最新的Tomcat(包括Tomcat6及以上版本)在对待POST请求和GET请求时的处理方式并不一致,请注意。
环境:Tomcat6.0 + MySQL 5 + Struts2
编码:UTF-8
1.MySQL数据库编码
对于MySQL中新创建的数据库采用UTF-8编码
2.Tomcat服务器设置
在server.xml文件中配置Connector标签下的URIEncoding,server.xml在conf目录下
port="8080" protocol="HTTP/1.1" redirectport="8443" uriencoding="UTF-8">
</connector>
3.JSP页面编码
contentType="text/html; charset=UTF-8"%>
注意:pageEncoding和charset需要同时设置
4.在web.xml文件中配置struts2和编码相关的拦截器
<filter-name>struts-cleanup </filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
注意:这个拦截器要放置在默认拦截器之前才能对编码生效。
如果实现了以上4步基本就可以解决Struts2项目中的GET请求(不包括客户端Ajax的GET请求,如何处理Ajax请求中的乱码问题,请参考下篇博客)
对于POST请求,最常用的方法就是编写过滤器在过滤器中进行编码,接下来看如何使用过滤器来处理POST请求。
5.编写过滤器
假设过滤器类名为CharsetEncodingFilter,在filter的doFilter()方法中设置编码。encoding是filter配置中的参数,值是UTF-8。
public void doFilter (ServletRequest sRequest, ServletResponse sResponse,
FilterChain filterChain ) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest ) sRequest ;
HttpServletResponse response = (HttpServletResponse ) sResponse ;
// 设置字符集
request. setCharacterEncoding (encoding ) ;
response. setCharacterEncoding (encoding ) ;
filterChain. doFilter (request, response ) ;
}
@Override
public void init (FilterConfig config ) throws ServletException
{
encoding = config. getInitParameter ( " ;encoding " ; ) ;
}
6.在web.xml文件中配置filter
<filter-name>charsetEncoding </filter-name>
<filter-class>web.filter.CharsetEncodingFilter </filter-class>
<init-param>
<param-name>encoding </param-name>
<param-value>UTF-8 </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncoding </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
在这里为filter设置了一个init-param,值为UTF-8(见第5步)
在这一步需要特别注意的是fiter配置放置的位置:需要放置在第4步中编码拦截器的前面。否则的话对于POST请求仍然会出现乱码。
因而最终的顺序如下:
<filter-name>charsetEncoding </filter-name>
<filter-class>web.filter.CharsetEncodingFilter </filter-class>
<init-param>
<param-name>encoding </param-name>
<param-value>UTF-8 </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncoding </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-cleanup </filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
经过以上6步处理后即可解决POST请求中的中文乱码问题。
最后
以上就是寒冷糖豆为你收集整理的Struts2中解决POST请求和GET请求中的中文乱码问题的全部内容,希望文章能够帮你解决Struts2中解决POST请求和GET请求中的中文乱码问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复