在web.xml中的配置
<!-- characterEncodingFilter字符編碼過濾器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!--要使用的字符集,通常咱們使用UTF-8(保險起見UTF-8最好)-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!--是否強制設置request的編碼爲encoding,默認false,不建議更改-->
<param-name>forceRequestEncoding</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!--是否強制設置response的編碼爲encoding,建議設置爲true,下面有關於這個參數的解釋-->
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<!--這裏不能留空或者直接寫 ' / ' ,否者不起做用-->
<url-pattern>/*</url-pattern>
</filter-mapping>web
CharacterEncodingFilter過濾器類淺析
打開該類源碼,能夠看到該類有三個類屬性
一、private String encoding; //要使用的字符集,通常咱們使用UTF-8(保險起見UTF-8最好)private boolean
二、forceRequestEncoding = false; //是否強制設置request的編碼爲encodingprivate boolean
三、forceResponseEncoding = false; //是否強制設置response的編碼爲encodingspring
主要方法只有一個,也就是下面這個,代碼邏輯很簡單,入註釋所解釋
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {app
String encoding = getEncoding();
if (encoding != null) { //若是設置了encoding的值,則根據狀況設置request和response的編碼
//若設置request強制編碼或request自己就沒有設置編碼
//則設置編碼爲encoding表示的值
if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
request.setCharacterEncoding(encoding);
}
//若設置response強制編碼,則設置編碼爲encoding表示的值
if (isForceResponseEncoding()) { //請注意這行代碼,下面有額外提醒
response.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
}ide
# 額外提醒
if (isForceResponseEncoding()) {
response.setCharacterEncoding(encoding);
}
是在
filterChain.doFilter(request, response);編碼
以前執行的,這也就是說這段代碼的做用是設置response的默認編碼方式,在以後的代碼裏是能夠根據需求設置爲其餘編碼的,即這裏設置的編碼可能不是最終的編碼,網上不少文檔說這裏設置的是最終的編碼方式,這是錯的。url
<二>xml