目錄
- SpringMVC的編碼過濾器配置
-
- 浏覽器伺服器互動的編碼格式介紹
-
- 問題:
- 解決
- SpringMVC的編碼過濾器配置
- SpringMVC的靜态資源放行
-
- SpringMVC的Dispatcher的攔截範圍問題
-
- 問題:
- 解決:
- SpringMVC的靜态資源放行配置
SpringMVC的編碼過濾器配置
浏覽器伺服器互動的編碼格式介紹
問題:
在浏覽器和伺服器的資料互動流程中,處理英文資料以外還有中文資料。
浏覽器發起的請求資料中包含中文,伺服器響應的資料包含中文。而浏覽器
預設的編碼格式為iso-8859-1,也就說浏覽器預設發送給伺服器的請求資料的
編碼格式為iso-8859-1。同理,伺服器響應給浏覽器的資料,浏覽器在接受到後
會按照iso-8859-1的編碼格式來進行解碼擷取資料。但是tomcat伺服器使用的
編碼格式為utf-8,這樣造成,浏覽器發起的請求資料在伺服器端使用utf-8的格式
接收出現亂碼,伺服器響應的utf-8類型的資料被浏覽器解析時出現亂碼。一旦出 現亂碼問題,一定是編碼格式和解碼格式不一緻造成的,怎麼辦?

解決
客戶不會解決這個問題。是以格式需要在伺服器端進行解決
後端解決接收後的資料
String uname = request.getParameter("uname");
String uname2=new String(uname.getBytes("iso-8859-1"),"utf-8");
複制
傳回給前端的資料
resp.setCharacterEncoding(“utf-8”)
resp.setContentType(“text/html;charset=utf-8”)
複制
SpringMVC的編碼過濾器配置
每個方法裡面進行解決,不好,我們要統一解決這個問題,是以使用過濾器
在項目的web.xml檔案中配置SpringMVC官方提供的編碼過濾器即可。
<!--配置編碼過濾器-->
<filter>
<filter-name>code</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>code</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
複制
SpringMVC的靜态資源放行
SpringMVC的Dispatcher的攔截範圍問題
問題:
按照SpringMVC的使用流程,需要在web.xml檔案中配置DispatcherServlet
的攔截範圍,而我們配置的攔截範圍為”/”,表示攔截除jsp請求以外的所有請求。
這樣造成,請求是js,css,圖檔等靜态資源的請求,也會被DispatcherServlet攔截
,調用對應的單元方法來處理請求。但是,我們呢是一個靜态資源的請求,不應該
按照普通單元方法請求的流程來處理,而是将對應的靜态資源響應給浏覽器使用。
怎麼辦?
解決:
①将DispatcherServlet的底層邏輯進行變更,靜态資源的請求就不要作為
單元方法請求處理,而是查找對應的資源響應給浏覽器。
②在SpringMVC的配置檔案中配置靜态資源的放行,告訴DispatcherServlet
哪些資源靜态資源需要放行,将靜态資源響應給了浏覽器。
SpringMVC的靜态資源放行配置
<!--配置靜态資源放行-->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
複制
注意:
浏覽器發起靜态資源請求,DispatcherServlet會先按照正常的單元方法邏輯
進行處理,如果找不到對應的單元方法,則根據SpringMVC的配置檔案的靜
态資源,判定此次請求是否為靜态資源請求,如果是則将資源響應給浏覽器,如
果不是,則響應404.也就說,不要設定某個單元方法的路徑和靜态資源的路徑
是一緻,這樣就算配置了靜态資源放行,也會導緻靜态資源無法通路的問題。