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中都寫一次這個代碼了總結
以上是生活随笔為你收集整理的tomcat请求数据的编码设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新 MSDN Library for
- 下一篇: Android - N级树形结构实现