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);
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章