spring框架的编码过滤器——CharacterEncodingFilter

<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>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
@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);
}

两个重要参数,分别是encodingforceEncoding

 

/**
 * 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;
}
时间: 2024-10-24 15:49:02

spring框架的编码过滤器——CharacterEncodingFilter的相关文章

深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Action,但是在Action中得到的中文全部是乱码,前台的页面编码都是GBK没有问题.这是为什么呢?下面我们就通过阅读FilterDispatcher和CharacterEncodingFilter这两个过滤器的源代码,了解其实现细节,最终得出为什么中文还是乱码! 测试环境及其前置知识 Struts

全站请求编码过滤器

1 *自定义的: 2 >代码: 3 public class EncodingFilter implements Filter{ 4 private String charset="utf-8"; 5 public void destroy(){ 6 } 7 public void doFilter(ServletRequest req,ServletResponse resp, 8 FilterChain chain){ 9 HttpServletRequest request

《经久不衰的Spring框架:@ResponseBody 中文乱码》(转)

转载自:http://www.cnblogs.com/shanrengo/p/6429291.html 问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的. @ReponseBody 注解不用多介绍了,用过SpringMVC的同学都很熟了,@ResponseBody 将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视

[技巧篇]12.从Spring的编码过滤器说起

有一枚学生问问了我一个问题,突然灵感爆发,他使用的Spring的过滤器,前台利用GET方式向后端发出一个请求,由于里面含有中文数据,结果在后端显示的是乱码,他问我为什么?明明在Spring里面也配了字符过滤器,却出现了乱码,所以就看了一下spring实现的该过滤器,下面是过滤器的实现代码org.springframework.web.filter.CharacterEncodingFilter.java public class CharacterEncodingFilter extends O

web.xml文件配置spring核心编码过滤器

<!-- 注册spring核心编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-nam

Spring字符集过滤器CharacterEncodingFilter(转)

Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEncoding)即可: Xml代码 <!-- 配置请求过滤器 ,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</filter-name> <filter-class>org.s

spring的编码过滤器

在ssm项目中经常会使用到请求.响应和页面展示等操作,都会涉及到编码的问题,一些时候会出现乱码的情况. 这里有几种设置编码的方法: 1.自带的web.xml.中配置编码过滤器 org.springframework.web.filter.CharacterEncodingFilter <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springfram

spring框架学习(六)AOP

spring框架学习(六)AOP AOP(Aspect-OrientedProgramming)面向方面编程,与OOP完全不同,使用AOP编程系统被分为方面或关注点,而不是OOP中的对象. AOP的引入 在OOP面向对象的使用中,无可避免的会出现代码重复,而且使用面向对象的编程方式,这种重复无法避免,比如用户权限判断中,根据相应的权限执行相应的方法:在servlet中设置编码格式时,同样相同的代码出现很多次,而且还根业务无关,很容易忘记写,结果运行的时候就出现乱码拉.这种重复代码不仅使编码麻烦,

解决Spring框架下中文乱码的问题

在使用了Spring框架下回发现很多表单交互的地方会发生乱码,而且写到数据库中也是乱码,这其实还是字符编码的问题,在我们还在用自己写的servlet的时候,直接在request和response加上字符约束就好了,但是我们在使用spring的时候,这样做就失去了框架的意义. 这时候我们可以使用一个过滤器来将转码. 如果你这样: 1 str = new String(str.getBytes("ISO-8859-1"), "GBK"); 转码. 写出来程序通用性不好,