Spring MVC中解决中文乱码问题时useBodyEncodingForURI="true"的作用
来源:互联网 发布:软件开发费用标准 编辑:程序博客网 时间:2024/04/28 10:51
一般在web.xml文件中作如下配置:
其作用是,当forceEncoding为false的前提下(默认为false),当request没有指定content-type或content-type不含编码时,该filter将会为这个request设定请求体的编码为filter的encoding值。
当forceEncoding为true的前提下,就会为request的请求体和response都设定为这个filter的encoding值。
<filter> <filter-name>CharacterEncoding</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
CharacterEncodingFilter类的源代码如下:
public class CharacterEncodingFilter extends OncePerRequestFilter { private String encoding; private boolean forceEncoding = false; /** * Set the encoding to use for requests. This encoding will be passed into a * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call. * <p>Whether this encoding will override existing request encodings * (and whether it will be applied as default response encoding as well) * depends on the {@link #setForceEncoding "forceEncoding"} flag. */ public void setEncoding(String encoding) { this.encoding = encoding; } /** * Set whether the configured {@link #setEncoding encoding} of this filter * is supposed to override existing request and response encodings. * <p>Default is "false", i.e. do not modify the encoding if * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()} * returns a non-null value. Switch this to "true" to enforce the specified * encoding in any case, applying it as default response encoding as well. * <p>Note that the response encoding will only be set on Servlet 2.4+ * containers, since Servlet 2.3 did not provide a facility for setting * a default response encoding. */ public void setForceEncoding(boolean forceEncoding) { this.forceEncoding = forceEncoding; } @Override 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); if (this.forceEncoding) { response.setCharacterEncoding(this.encoding); } } filterChain.doFilter(request, response); } }
这个filter有两个属性,encoding和forceEncoding,我们可以在web.xml文件中来设定这两个属性值。
每次request请求到来执行方法doFilterInternal,首先调用request.getCharacterEncoding(),本质就是从请求header content-type中获取编码值,如果没有,则调用request.setCharacterEncoding(this.encoding)将该filter的encoding值设置为请求体的编码方式,记住该编码方式只对请求体,不针对请求参数。当forceEncoding=true时,不管请求header content-type有没有编码方式,始终将该filter的encoding值设置到request和response中,同样只针对request的请求体。
但这个设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat的server.xml配置文件,如下:
将下面的代码:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
修改为:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
useBodyEncodingForURI=true是说,请求参数的编码方式要采用请求体的编码方式。当useBodyEncodingForURI=true时,若请求体采用utf-8解析,则请求参数也要采用utf-8来解析。
- Spring MVC中解决中文乱码问题时useBodyEncodingForURI="true"的作用
- useBodyEncodingForURI="true"解决Tomcat乱码问题
- 写了一个查询数据库的程序,不熟的Tomcat6。查询条件为英文时运行正常,为中文时出现乱码。后在tomcap的server.xml中加入useBodyEncodingForURI="true解决了问题
- Spring MVC 中解决中文乱码的问题
- 如何利用URIEncoding和useBodyEncodingForURI解决tomcat中文乱码问题
- 解决spring mvc中乱码的问题。
- 解决Spring Web MVC中POST中文乱码问题
- 解决Spring MVC中文乱码问题
- 解决Spring MVC 中文乱码 问题
- 解决Spring MVC 中文乱码 问题
- spring mvc 响应中文乱码问题的解决
- Spring Mvc中@ResponseBody中文乱码解决
- spring mvc 3.0 中解决post表单提交出现的中文乱码问题
- spring mvc解决中文乱码问题需在web.xml文件中添加下面的配置
- Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
- Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
- Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
- Spring MVC接口解决GET请求时中文乱码的问题
- jQuery如何操作ajax
- 汽车加油问题
- win10系统配置java环境变量
- 引用NDK自带例子
- 四个月的蜕变之关于匿名内部类的一个面试题
- Spring MVC中解决中文乱码问题时useBodyEncodingForURI="true"的作用
- 【MySQL 5.7 Reference Manual】15.4.1 Buffer Pool(缓冲池)
- CentOS7 如何查看端口是被哪个应用/进程占用及kill
- 正则表达式笔记
- 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五
- 始于2016,写在2017
- MyEclipse+Tomcat配置详解
- LSM6DS3 gyro数据设置
- jsp的九大内置对象