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

到此這篇關於Java CharacterEncodingFilter案例詳解的文章就介紹到這瞭,更多相關Java CharacterEncodingFilter內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: