tomcat+JSP乱码解决


tomcat+JSP乱码解决

环境:tomcat5.5,

1. tomcat编码转换原则


所有页面、数据库、存取文件都应采用统一的编码,否则在处理过程中需要进行编码转换。在此统一编码假定为UTF-8,其它编码类似。


图表 1tomcat编码转换

默认情况下tomcat是按ISO-8859-1编码来处理数据的,所有传给tomcat的数据都会被转换为ISO-8859-1编码,而从tomcat中得到的也是以ISO-8859-1编码的数据。因此,在JSP代码从服务器获取客户端传递来的参数时,必须将参数编码从ISO-8859-1转为UTF-8


2. 具体处理方式


各种编码名称:

http://www.iana.org/assignments/character-sets/character-sets.xml


2.1. 通用方法


String s = request.getParameter(“...”);
String str= new String(s.getBytes("ISO-8859-1"),"UTF-8");

该方法过于繁琐,需要对每次得到的参数进行单独的转码。


2.2. 处理POST提交的数据


2.2.1. 方法一:


必须在第一次获取参数之前调用request.setCharacterEncoding(UTF-8);

注意:这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效


2.2.2. 方法二:


如果使用了spring框架,则可以在server.xml中使用

org.springframework.web.filter.CharacterEncodingFilter过滤器:

<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF8</param-value> 
</init-param> 
<init-param> 
<param-name>forceEncoding</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter> 

<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

注意:个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放

2.3. 处理GET提交的参数


2.3.1. 修改URI编码


在这个目录下:Apache Software Foundation\Tomcat 6.0\confserver.xml文件中,找到

   <Connector port="8888" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"  />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    -->  
然后修改如下:
   <Connector port="8888" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

注:对于tomcat5.0只需要修改第一个Connector就可以了。

有个地方说是在Connector中添上useBodyEncodingForURI="true",但我试了一下,不行。


3. 编码设置


3.1. *.jsp文件


<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>

contentType="text/html; charset=UTF-8":用于指定浏览器以UTF-8编码来解释网页。

pageEncoding="UTF-8" :说明该jsp文件的编码类型,必须与文件编码类型一致(在eclipse中会据此将文件保存为该类型,而不管eclipse当时的encoding是什么)。此外,tomcat会据此读取jsp文件并转化为servlet存为系统默认编码。


3.2. mysql数据库


1mysql配置文件:修改mysqlwindows\my.inidefault-character-set=utf-8


2mysql里数据库和表也都设为utf8_unicode_ci


3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8


参考

http://www.blogjava.net/caizh2009/articles/309193.html

 http://xinbupo.blog.163.com/blog/static/157566605201241684656283/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章