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