CharacterEncodingFilter詳解


字符編碼過濾器  (Spring框架對字符編碼的處理)

基於函數回調,對所有請求起作用,只在容器初始化時調用一次,依賴於servlet容器.

web.xml配置文件

 1 <filter>
 2         <filter-name>Set Character Encoding</filter-name>
 3         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 4         <async-supported>true</async-supported>
 5         <init-param>
 6             <param-name>encoding</param-name>
 7             <param-value>UTF-8</param-value>
 8         </init-param>
 9         <init-param>
10             <param-name>forceEncoding</param-name>
11             <param-value>true</param-value>
12         </init-param>
13     </filter>
14     <filter-mapping>
15         <filter-name>Set Character Encoding</filter-name>
16         <url-pattern>/*</url-pattern>
17     </filter-mapping>

其中encoding用來設置編碼格式,forceEncoding用來設置是否理會 request.getCharacterEncoding()方法,設置為true則強制覆蓋之前的編碼格式。

查看CharacterEncodingFilter源碼,可以看出forceEncoding設置為true,強制覆蓋之前的編碼格式.

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);
    }

與過濾器的區別
過濾器可以簡單理解為“取你所想取”,忽視掉那些你不想要的東西;攔截器可以簡單理解為“拒你所想拒”,關心你想要拒絕掉哪些東西,比如一個BBS論壇上攔截掉敏感詞匯。
1.攔截器是基於java反射機制的,而過濾器是基於函數回調的。
2.過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。
3.攔截器只對action起作用,而過濾器幾乎可以對所有請求起作用。
4.攔截器可以訪問action上下文、值棧里的對象,而過濾器不能。
5.在action的生命周期里,攔截器可以多起調用,而過濾器只能在容器初始化時調用一次。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM