用tomcat自带的字符集转换filter。

解决方案 »

  1.   

    一、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。package filters;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;
    import javax.servlet.UnavailableException;public class SetCharacterEncodingFilter implements Filter {
     protected String encoding = null;
     protected FilterConfig filterConfig = null;
     protected boolean ignore = true; public void destroy() {
      this.encoding = null;
      this.filterConfig = null;
     }public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)
    throws IOException, ServletException { // Conditionally select and set the character encoding to be used
     if (ignore || (request.getCharacterEncoding() == null)) {
      String encoding = selectEncoding(request);
      if (encoding != null)
       request.setCharacterEncoding(encoding);
     } // Pass control on to the next filter
     chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;
     this.encoding = filterConfig.getInitParameter("encoding");
     String value = filterConfig.getInitParameter("ignore");
     if (value == null)
      this.ignore = true;
     else if (value.equalsIgnoreCase("true"))
      this.ignore = true;
     else if (value.equalsIgnoreCase("yes"))
      this.ignore = true;
     else
      this.ignore = false;}protected String selectEncoding(ServletRequest request) {
     return (this.encoding);
    }}   配置web.xml<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> 
      

  2.   

    wingtrace(暮寒.烟灰.风化物.PG世界最重要的是基础) 你这篇文章我见过,说:可以在下面地址下载修改过的jar文件,
    可是下面的地址在哪呀
      

  3.   

    作修改也太麻烦了点,我在用tomcat5.0.19时也碰到过中文乱码问题,经过修改也解决了,可是麻烦。据说tomcat5.0.12~19都有这问题。所以我现在改用tomcat5.0.28,没有碰到我上述的乱码问题。所以,劝楼主可以放弃1x系列的TOMCAT。
      

  4.   

    谢谢各位的热心解答,我已经用了5.0.28了,呵呵
    可是现在还是有歌问题解决不了,那就是html里的中文还是显示乱码(注意:我已经在其中加了这样的语句:<meta http-equiv="content-type" content="text/html; charset=GB2312">)
    .请问这个问题该怎么解决啊?
    谢谢
      

  5.   

    建议不要在JSP项目中使用html页面