Spring中web.xml过滤器详解:org.springframework.web.filter.CharacterEncodingFilter
2019-03-19 16:03
120 查看
org.springframework.web.filter.CharacterEncodingFilter 是Spring为web开发提供的一个过滤器,主要目的是防止web开发中出现的乱码问题。是Spring在web请求中定义request和response的编码。
使用场景
当客户端和服务端使用了不同的字符集进行编码,就会出现乱码的问题。这就需要服务端在收到客户端发来的数据,或返回给客户端的数据时,能够使用统一的字符集进行编码,以避免乱码的出现。
对于一个表单来说,如果method=get的话,对于Spring提供的这个过滤器来说是不会起作用的。 因为get方法是将参数直接跟在了请求的url上 ,而post方法则是将请求的参数放在报文内部。
使用方式
具体是在wen.xml中进行设置,具体使用方法如下:
[code]<!-- Filter 定义 --> <!-- Character Encoding filter --> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,设置为true则强制覆盖之前的编码格式 CharacterEncodingFilter类具有encoding和forceEncoding两个属性,其中encoding是表示设置request的编码,forceEncoding表示是否同时设置response的编码。 当request中已经被指定了一个字符集的时候是否再将用endcoding对应的字符集设置到request中去。默认为false,意思是当request中指定了编码方式,则不适用用encoding指定的编码方式。
查看CharacterEncodingFilter的源码
[code] @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); }
//当指定了encoding,且forceEncoding为false ,同时request中没有制定编码方式事,设置request和response的编码方式为encoding所指定的编码方式
通过源码也能看见,encodin用于设置request的编码,而forceEncoding为ture时设置response的编码。
源码赏析
当Servlet容器启动的时候,会读取web.xml中对于过滤器的配置信息, 读取到<init-param>中的子标签<param-name>encoding和forceEncoding所对应的<param-value>的值,再通过调用该类setEncoding(String encoding)和setForceEncoding(boolean forceEncoding) 将值注入到这连个字段中。
相关文章推荐
- org.springframework.web.filter.CharacterEncodingFilter详解
- 解决中文乱码用spring经典编码过滤器org.springframework.web.filter.CharacterEncodingFilter
- 解决中文乱码用spring经典编码过滤器org.springframework.web.filter.CharacterEncodingFilter
- 解决中文乱码用spring经典编码过滤器 org.springframework.web.filter.CharacterEncodingFilter
- Spring在web.xml请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)
- org.springframework.web.filter.CharacterEncodingFilter详解
- org.springframework.web.filter.CharacterEncodingFilter
- 关于启动Tomcat出现异常:java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter
- 通过org.springframework.web.filter.CharacterEncodingFilter定义Spring web请求的编码
- maven重新导入出现java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
- org.springframework.web.filter.CharacterEncodingFilter
- org.springframework.web.filter.CharacterEncodingFilter的解决方法
- Spring在web请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)
- Spring在web请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)
- org.springframework.web.filter.CharacterEncodingFilter
- org.springframework.web.filter.CharacterEncodingFilter .
- maven org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter
- Idea中ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
- Spring为web开发提供的一个类 org.springframework.web.filter.CharacterEncodingFilter
- java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter解决方案