spring的字符集过滤通过用于处理项目中的乱码问题,该过滤器位于org.springframework.web.filter包中,指向类CharacterEncodingFilter,CharacterEncodingFilter源代码如下:
-
- package org.springframework.web.filter;
-
- import java.io.IOException;
- import javax.servlet.FilterChain;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class CharacterEncodingFilter extends OncePerRequestFilter {
-
- private String encoding;
-
- private boolean forceEncoding = false;
-
-
-
- public void setEncoding(String encoding) {
- this.encoding = 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);
- }
-
- }
上述代码显示,在配置字符集过滤器时可设定两个参数的值,如下:
l encoding:字符集,即将过滤到的request的字符集设置为encoding指定的值,如UTF-8等,相当于:
- request.setCharacterEncoding
l
forceEncoding:字面意思是强制字符集,但你大可不必按字面意思理解,因为这个参数的值只不过是指定response的字符集是否也设置成
encoding所指定的字符集,所以你可以选择设置为true或false,当值为true时,相当于
- request.setCharacterEncoding(“”);
- response.setCharacterEncoding(“”);
当值为false时,相当于:
- request.setCharacterEncoding(“”);
默认值为false。
示例:
- <filter>
- <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
以上代码放置在web.xml中,相当于servlet中的:
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)
原文:http://www.cnblogs.com/hyl8218/p/5808652.html