示例代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<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>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
CharacterEncodingFilter內部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);
}
如果配置的是強制編碼,可以發現響應的編碼
和請求編碼
設置成一樣了,CharacterEncodingFilter在設置完成對編碼的設置後,繼續下一個過濾器鏈的操作.
注意:
一般項目中都會配置多個filter,作爲項目的編碼設置,一般需要最先效,需要將該<filter-mapping>.. </filter-mapping>
放在所有</filter-mapping>
的前面.
配置多個filter時的調用鏈順序規則: ilter-mapping配置出現的順序爲依次調用 doFilter() 的順序