Java CharacterEncodingFilter
NicoJ 人气:0想了解Java CharacterEncodingFilter案例详解的相关内容吗,NicoJ在本文为您仔细讲解Java CharacterEncodingFilter的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java,CharacterEncodingFilter,Java,CharacterEncodingFilter详解,下面大家一起来学习吧。
一、什么是CharacterEncodingFilter
官方解释如下
是spring内置过滤器的一种,用来指定请求或者响应的编码格式。在web开发中经常被从来使用
二、CharacterEncodingFilter的用法
在web.xml中的配置
<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>
其中encoding用来指定编码格式,forceEncoding表示是否强制response的编码格式也是encoding格式
三、CharacterEncodingFilter 原理
服务器启动的时候就会创建Filter,将init-param中的参数加载,注入到CharacterEncodingFilter 类中,浏览器每次发送请求都会经过这个过滤器,然后调用doFilterInternal
CharacterEncodingFilter 类图
可以看到CharacterEncodingFilter继承OncePerRequestFilter,OncePerRequestFilter是个抽象类,其中的抽象方法doFilterInternal被CharacterEncodingFilter实现,同时OncePerRequestFilter实现了doFilter方法,调用了doFilterInternal方法。
doFilterInternal方法
@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); }
加载全部内容