關於org.springframework.web.filter.CharacterEncodingFilter的學習

介紹

org.springframework.web.filter.CharacterEncodingFilter
這是一個過濾器,是Spring在web請求中定義request和response的編碼。java

使用場景

當客戶端和服務端使用了不一樣的字符集進行編碼,就會出現亂碼的問題。這就須要服務端在收到客戶端發來的數據,或返回給客戶端的數據時,可以使用統一的字符集進行編碼,以免亂碼的出現。web

使用方式

具體是在wen.xml中進行設置,具體使用方法以下:spring

<filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>/api/content</url-pattern>
        <url-pattern>/servlet/userSelect</url-pattern>
    </filter-mapping>

設置說明

CharacterEncodingFilter類具備encoding和forceEncoding兩個屬性,其中encoding是表示設置request的編碼,forceEncoding表示是否同時設置response的編碼。api

查看CharacterEncodingFilter的源碼

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

經過源碼也能看見,encodin用於設置request的編碼,而forceEncoding爲ture時設置response的編碼。app

相關文章
相關標籤/搜索