java环境url中文参数乱码处理
2013-01-07 23:28
281 查看
在做搜索开发过程中,由于翻页功能需要,要把当前查询的中文条件放在URL中带到服务器进行下一页查询,结果出现乱码情况。
此时情况有如下两种:
1、在输入框输入搜索内容,直接通过from提交,参数值正常读到,没有乱码。
2、把中文参数UTF-8编码后,添加到URL后,然后服务器读取到乱码。
服务端使用Spring框架MVC模型处理WEB请求,web.xml配置如下:
刚刚开始时,以为是过滤器的问题,通过查询后发现,原来CharacterEncodingFilter只有会对POST的数据有效。
spring的CharacterEncodingFilter的过滤机制,该过滤器的源码:
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"同样适用
此时情况有如下两种:
1、在输入框输入搜索内容,直接通过from提交,参数值正常读到,没有乱码。
2、把中文参数UTF-8编码后,添加到URL后,然后服务器读取到乱码。
服务端使用Spring框架MVC模型处理WEB请求,web.xml配置如下:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
刚刚开始时,以为是过滤器的问题,通过查询后发现,原来CharacterEncodingFilter只有会对POST的数据有效。
spring的CharacterEncodingFilter的过滤机制,该过滤器的源码:
protectedvoiddoFilterInternal(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainfilterChain) 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"
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"URIEncoding="UTF-8"/>
如果是通过https进行加密访问时,URIEncoding="UTF-8"同样适用
<Connectorport="8443"protocol="org.apache.coyote.http11.Http11Protocol"SSLEnabled="true"
maxThreads="150"scheme="https"secure="true"
keystoreFile="tomcat.keystore"keystorePass="123456"
clientAuth="false"sslProtocol="TLS"URIEncoding="UTF-8"/>
相关文章推荐
- JAVA 中URL中文参数乱码的处理方法(汇总)
- JAVA——URL链接中文参数乱码的若干处理方法
- JAVA 中URL中文参数乱码的处理方法(汇总)
- JAVA中URL链接中文参数乱码处理方法
- JAVA中URL链接中文参数乱码处理方法
- JAVA 中URL中文参数乱码的处理方法(汇总)
- JAVA 中URL中文参数乱码的处理方法
- JAVA 中URL中文参数乱码的处理方法
- JAVA 中URL中文参数乱码的处理方法(汇总)
- JAVA 中URL链接中文参数乱码的处理方法
- 关于JAVA中URL传递中文参数,取值是乱码的解决办法
- JAVA 中URL链接中文参数乱码的处理方法
- 关于前台URL传递中文参数到java后台乱码的问题
- js 处理url中文参数 java端接收处理
- location.herf=url参数有中文传到后台java代码有乱码
- 关于JAVA中URL传递中文参数,取值是乱码的解决办法
- JAVA 中URL链接中文参数乱码的处理方法JAVA 中URL链接中文参数乱码的处理方法
- jsp页面间跳转 url传递中文参数乱码 以及后续细节处理
- 关于JAVA中URL传递中文参数,取值是乱码的解决办法
- struts2配置文件中url传递参数中文乱码处理