介紹
org.springframework.web.filter.CharacterEncodingFilter
這是一個過濾器,是Spring在web請求中定義request和response的編碼。
使用場景
當客戶端和服務端使用了不同的字符集進行編碼,就會出現亂碼的問題。這就需要服務端在收到客戶端發來的數據,或返回給客戶端的數據時,能夠使用統一的字符集進行編碼,以避免亂碼的出現。
使用方式
具體是在wen.xml中進行設置,具體使用方法如下:
<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的編碼。
查看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的編碼。