我是靠谱客的博主 寒冷糖豆,最近开发中收集的这篇文章主要介绍Struts2中解决POST请求和GET请求中的中文乱码问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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目录下

<connector connectiontimeout="20000"
          port="8080" protocol="HTTP/1.1" redirectport="8443" uriencoding="UTF-8">
</connector>

 

3.JSP页面编码

<%@ page language="jsp" import="java.util.*" pageEncoding="UTF-8"  
    contentType="text/html; charset=UTF-8"%>

注意:pageEncoding和charset需要同时设置

 

4.在web.xml文件中配置struts2和编码相关的拦截器

<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>

注意:这个拦截器要放置在默认拦截器之前才能对编码生效。

如果实现了以上4步基本就可以解决Struts2项目中的GET请求(不包括客户端Ajax的GET请求,如何处理Ajax请求中的乱码问题,请参考下篇博客)

对于POST请求,最常用的方法就是编写过滤器在过滤器中进行编码,接下来看如何使用过滤器来处理POST请求。

 

5.编写过滤器

假设过滤器类名为CharsetEncodingFilter,在filter的doFilter()方法中设置编码。encoding是filter配置中的参数,值是UTF-8。

@Override  
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 ( &quot ;encoding &quot ; ) ;  
}

 

6.在web.xml文件中配置filter

<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>  
    <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请求中的中文乱码问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部