谈谈有关jsp乱码问题以及解决方法。(jsp+mysql+tomcat)

(1) 乱码产生的原因:编码方式不一致。

(2)常见的编码方式:gb2312(简体中文) big5(繁体中文) gbk(中文【简,繁】) utf-8(国际编码) iso-8859-1(拉丁字符)

(3) 乱码问题的详细解决方法:

      1.首先,设置mysql数据库支持gbk/gb2312.

            具体方法:打开mysql文件夹,找到my . ini文件,修改my.ini配置文件。

             [client] 

             port=3306 

            default-character-set=gb2312 

            以及 

            [mysqld]下的 

            default-character-set=gb2312 

            修改,保存,重启。若设为System服务,可以在控制面板-管理工具-服务中找到mySQL服务,重启。

       2.设置tomcat支持中文。具体方法如下:

            找到tomcat安装目录下server.xml配置文件,然后修改

            <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" 

              reloadable="true"     redirectPort="8443" reloadable="true" URIEncoding="gb2312" /> 

              其中rereloadable=“true”是设置热启动,这样设置的好处是当你在调试项目的时候可以不用手动重新部                    署,tomcat会自动识别自动重新部署;URIEnocding="gb2312"是设置tomcat支持gb2312编码。

       3.确保jsp页面是统一编码。

          <%@ page language="java" pageEncoding="gb2312"%> 或者是gbk  如果要支持国际化, 编码要改为utf-          8。

         4.前面的三个方面往往还不能从根本上解决问题,要从根本上解决问题必须加一个filter。

           具体方法如下:

           建一个java filter类:

           packag com.iesgroup.crm.filter.EncodingFilter

          import javax.servlet.Filter; 

           import javax.servlet.FilterChain; 

           import javax.servlet.FilterConfig; 

           import javax.servlet.ServletException; 

           import javax.servlet.ServletRequest; 

           import javax.servlet.ServletResponse; 

          public class EncodingFilter  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 { 

           if (ignore || (request.getCharacterEncoding() == null)) { 

           String encoding = selectEncoding(request); 

           if (encoding != null) 

          request.setCharacterEncoding(encoding); 

         } 

        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>filter</filter-name>

       <filter-class>com.iesgroup.crm.filter.EncodingFilter</filter-class>

       <init-param>

       <param-name>encoding</param-name>

       <param-value>UTF-8</param-value>/*jsp页面编码如果是gbk的话,这里则改为gbk,gb2312也一样*/

       </init-param>

       <init-param>

       <param-name>ignore</param-name>

       <param-value>true</param-value>

       </init-param>

      

  </filter>

 <!--  <filter-mapping> 注释掉的过滤方式也行

        <filter-name>filter</filter-name>

        <url-pattern>/*</url-pattern>

  </filter-mapping> -->

   <filter-mapping>

    <filter-name>filter</filter-name>

    <servlet-name>action</servlet-name>

    

   </filter-mapping>

    <filter-mapping>

    <filter-name>filter</filter-name>

     <servlet-name>*.jsp</servlet-name>

    </filter-mapping>

    最后,你的jsp页面跟mysql数据库的都能够正常显示中文了!