天天看點

tomcat請求資料的編碼設定

tomcat5中,為了保證get資料采用UTF8編碼,在server.xml中進行了如下設定:

<Connector port="8080" maxThreads="150" minSpareThreads="25"

maxSpareThreads="75" enableLookups="false" redirectPort="8443"

acceptCount="100" debug="99" connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="UTF-8"/>

這裡指定了get時候的資料編碼。但是,當使用IIS作為webserver轉發servlet/jsp請求給Tomcat時候,這個設定卻失效了。其實原因很簡單:IIS是通過AJP協定,把請求轉發到Tomcat監聽的8009端口上的,是以這裡針對8080的設定自然就無效了。正确的方法是進行下面的設定:

<Connector port="8009" enableLookups="false" redirectPort="8443"

debug="0" protocol="AJP/1.3" URIEncoding="UTF-8"/>

========================================================================================

Tomcat 6.0

路徑:Tomcat 6.0\conf\server.xml

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

connectionTimeout="20000"

redirectPort="8443"

URIEncoding="UTF-8" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

問題解決辦法: 

1)修改server.xml,在connector标簽中增加URIEncoding="gb2312" 

2)對url編碼 

java.net.URLEncoder.encode(   url   ); 

注意:url的起始如果非中文如   "/test/中文/中國.jsp" 

則應該寫成"/test/"   +   java.net.URLEncoder.encode(   "中文/中國.jsp"   ); 

意思是隻對中文編碼,但是   "中文/中國.jsp"中的"/"沒有問題

tomcat設定URIEncoding="utf-8"之後,可以解決了中文路徑問題,例如:http://localhost:8081/測試.jpg
但是http://localhost:8081/TServlet?a=測試
這樣擷取不到中文,也不能正确編碼,因為tomcat使用的是預設的ISO-8859-1編碼,在變成UTF-8之前已經編碼過了,是以亂碼,要讓不進行ISO-8859-1編碼,還得加一句:useBodyEncodingForURI="true"      
tomcat不設定,用預設的
你在你的servlet或者struts的action中,對request對象設定編碼即可解決問題。
例:request.setCharacterEncoding("GBK"); 

常用的方法是建一個過濾器filter,把request.setCharacterEncoding("GBK"); 放到過濾器的方法裡,這樣每次送出都會經過過濾器設定編碼,就不需要每個servlet或者action中都寫一次這個代碼了       

作者:進階測試開發網

本文版權歸作者有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。