黑马程序员技术交流社区

标题: struts2的字符集问题 [打印本页]

作者: 柴乔军    时间: 2013-1-18 16:01
标题: struts2的字符集问题
本帖最后由 柴乔军 于 2013-1-18 16:05 编辑

使用的是struts2.1.6版本,在struts2的配置文件中配置了
<constant name="struts.i18n.encoding" value="GBK"/>
没有效果,又在web.xml中配置了spring的字符过滤器,并放在了struts2过滤器之前,现在往数据库中保存数据时,
是不会乱码的,可以正常保存入中文数据,如下:
  1. <filter>
  2. <filter-name>CharacterEncodingFilter</filter-name>
  3. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name>encoding</param-name>
  6. <param-value>GBK</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>CharacterEncodingFilter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

  13. <!-- session管理 -->
  14. <filter>
  15. <filter-name>OpenSessionInViewFilter</filter-name>
  16. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  17. </filter>
  18. <filter-mapping>
  19. <filter-name>OpenSessionInViewFilter</filter-name>
  20. <url-pattern>/*</url-pattern>
  21. </filter-mapping>

  22. <!-- 配置Spring -->
  23. <listener>
  24. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  25. </listener>
  26. <context-param>
  27. <param-name>contextConfigLocation</param-name>
  28. <param-value>classpath:applicationContext-*.xml</param-value>
  29. </context-param>
  30. <listener>
  31. <listener-class>com.juchen.util.InitData</listener-class>
  32. </listener>


  33. <!-- 配置Struts -->
  34. <filter>
  35. <filter-name>struts</filter-name>
  36. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  37. </filter>
  38. <filter-mapping>
  39. <filter-name>struts</filter-name>
  40. <url-pattern>/*</url-pattern>
  41. </filter-mapping>
复制代码
可在页面上进行模糊查询,页面间传递模糊查询信息时却出现乱码,求高人解决!

当点下一页时就乱了。。。

作者: 王少雷    时间: 2013-1-18 19:12
我肯定配置文件没错,楼主 过滤器是怎么写的,能贴出代码看看吗?
作者: 王少雷    时间: 2013-1-18 19:14
本帖最后由 王少雷 于 2013-1-18 19:15 编辑

public class LanguageFilter extends HttpServlet implements Filter {
        private static final long serialVersionUID = -7158070919202747452L;
        private FilterConfig fconfig;
        
        public void init(FilterConfig fconfig) throws ServletException {
                this.fconfig=fconfig;
        }
        public void doFilter(ServletRequest request, ServletResponse response,
                        FilterChain filterChain) throws IOException, ServletException {
                try
                {
                        String character=fconfig.getInitParameter("encoding");
                        if (character==null || "".equals(character)) character="utf-8";
                        request.setCharacterEncoding(character);
                        response.setCharacterEncoding(character);
                        filterChain.doFilter(request, response);
                }
                catch(Exception ex)
                {
                        ex.printStackTrace();
                }
        }
}
这是我写的一个过滤器,你可以参考一下。配置文件里改成utf-8再试试。



作者: 柴乔军    时间: 2013-1-18 19:17
过滤器是用的Spring集成的,不是自己写的,过滤器能够肯定没有问题,保存到数据库里的中文数据都是正确的
作者: 柴乔军    时间: 2013-1-18 19:21
刚找到了一种解决方法,但是要改Tomcat的配置文件,在server.xml中做了修改
加入了URIEncoding="GBK" ,自己定义的过滤器也没有用
  1. <Connector port="80" protocol="HTTP/1.1"
  2.                connectionTimeout="20000"
  3.                redirectPort="8443"
  4.                           URIEncoding="GBK" />
复制代码

作者: yong230    时间: 2013-1-18 21:05
URIEncoding只对Get方式传递的中文参数起作用,对于post提交的中文表单数据必须加过滤器设置编码方式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2