彻底解决Tomcat 5.0.19的中文乱码问题

一、Include的页面乱码


现象:include进来的页面出现乱码,其它页面正常。
原因:Tomcat在缺省情况下使用ISO-8859-1编码,但是在include时有时Tomcat不能正确根据外层.jsp文件的编码解析include进来的文件,造成include进来的文件中的中文乱码。
解决:这儿可以有很多解决办法,但是对于我们的中文环境,从根本上的解决办法是将Tomcat 5.0.19的核心缺省编码从ISO-8859-1修改为GBK 。可以在下面地址下载修改过的jar文件,
    右击保存
jasper-compiler.jar,jasper-runtime.jar位于/common/lib下,其它位于/server/lib下,将新的.jar文件替代原.jar即可。

二、提交的数据乱码


现象:通过表单提交的数据出现乱码。
原因:原因未明。可能是Tomcat在接收到请求后,并没有能够根据request中的信息提前正确的编码方式。
解决:可以添加一个设置字符集的Filter。

  1. package filters;
  2.  
  3.  
  4. import java.io.IOException;
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.UnavailableException;
  12.  
  13.  
  14. public class SetCharacterEncodingFilter implements Filter {
  15.     protected String encoding = null;
  16.     protected FilterConfig filterConfig = null;
  17.     protected boolean ignore = true;
  18.  
  19.     public void destroy() {
  20.  
  21.         this.encoding = null;
  22.         this.filterConfig = null;
  23.  
  24.     }
  25.  
  26.     public void doFilter(ServletRequest request, ServletResponse response,
  27.                          FilterChain chain)
  28.     throws IOExceptionServletException {
  29.  
  30.         // Conditionally select and set the character encoding to be used
  31.         if (ignore || (request.getCharacterEncoding() == null)) {
  32.             String encoding = selectEncoding(request);
  33.             if (encoding != null)
  34.                 request.setCharacterEncoding(encoding);
  35.         }
  36.  
  37.     // Pass control on to the next filter
  38.         chain.doFilter(request, response);
  39.  
  40.     }
  41.  
  42.     public void init(FilterConfig filterConfig) throws ServletException {
  43.  
  44.     this.filterConfig = filterConfig;
  45.         this.encoding = filterConfig.getInitParameter("encoding");
  46.         String value = filterConfig.getInitParameter("ignore");
  47.         if (value == null)
  48.             this.ignore = true;
  49.         else if (value.equalsIgnoreCase("true"))
  50.             this.ignore = true;
  51.         else if (value.equalsIgnoreCase("yes"))
  52.             this.ignore = true;
  53.         else
  54.             this.ignore = false;
  55.  
  56.     }
  57.  
  58.     protected String selectEncoding(ServletRequest request) {
  59.  
  60.         return (this.encoding);
  61.  
  62.     }
  63.  
  64.  
  65. }


配置web.xml

[pre]    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>[/pre]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值