java中文 x_java环境url中文参数乱码处理
在做搜索開發過程中,由于翻頁功能需要,要把當前查詢的中文條件放在URL中帶到服務器進行下一頁查詢,結果出現亂碼情況。
此時情況有如下兩種:
1、在輸入框輸入搜索內容,直接通過from提交,參數值正常讀到,沒有亂碼。
2、把中文參數UTF-8編碼后,添加到URL后,然后服務器讀取到亂碼。
服務端使用Spring框架MVC模型處理WEB請求,web.xml配置如下:
org.springframework.web.context.ContextLoaderListener
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
appServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/servlet-context.xml
1
appServlet
*.htm
剛剛開始時,以為是過濾器的問題,通過查詢后發現,原來CharacterEncodingFilter只有會對POST的數據有效。
spring的CharacterEncodingFilter的過濾機制,該過濾器的源碼:
protected voiddoFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throwsServletException, IOException {if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
request.setCharacterEncoding(this.encoding);
//這行代碼決定了過濾器的過濾機制,這行代碼只會對請求正文進行編碼,這對于POST方式的請求有效; //當請求方式為GET時,需要的參數位于請求頭的URI中,不會受到該行代碼影響。
//所以,spring的CharacterEncodingFilter對于GET方式的HTTP請求,無能為力。
if (this.forceEncoding && responseSetCharacterEncodingAvailable) {
response.setCharacterEncoding(this.encoding);
}
}
filterChain.doFilter(request, response);
}
既然spring的CharacterEncodingFilter對GET方式的HTTP請求無影響,那繼續查找其它原因。
當我們通過瀏覽器提交數據到Tomcat服務器時,首先接觸數據的當然是服務器本身啦,然后找到原因了,修改tomcat的配置文件:conf/server.xml 找到connector節點,修改如下:添加URIEncoding="UTF-8"
如果是通過https進行加密訪問時,URIEncoding="UTF-8"同樣適用
總結
以上是生活随笔為你收集整理的java中文 x_java环境url中文参数乱码处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java反射机制的基本概念与使用_Jav
- 下一篇: java全文检索的框架_lucene框架