而当HTTP请求以GET方式发出时,请求参数位于请求头的URI中。
同时需要知道spring的CharacterEncodingFilter的过滤机制。附该过滤器的源码:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, 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请求无能为力,我们必须找到能够过滤GET方式请求的办法啊。问一下谷歌老师吧:
搜索了一大堆,综合一下,大概有两种解决办法:
第一种:修改tomcat的配置文件:conf/server.xml 找到connector节点,修改如下:
connectionTimeout="20000"
redirectPort="8443" URIEncoding="GBK"/>
第二种:类似于如下代码:
$.getJSON("yuanChengYanZhen!qingDanMingCheng.do?qingDanName="+encodeURI(qingDanName,"gbk"),function(result){});
然后在后台解码传入的参数:
String name=URLDecoder.decode(request.getParameter("qingDanName"),"gbk");