天天看點

深度學習springMVC(三)SpringMVC的編碼過濾器配置, SpringMVC的靜态資源放行(看不懂你打我)SpringMVC的編碼過濾器配置SpringMVC的靜态資源放行

目錄

  • SpringMVC的編碼過濾器配置
    • 浏覽器伺服器互動的編碼格式介紹
      • 問題:
      • 解決
    • SpringMVC的編碼過濾器配置
  • SpringMVC的靜态資源放行
    • SpringMVC的Dispatcher的攔截範圍問題
      • 問題:
      • 解決:
      • SpringMVC的靜态資源放行配置

SpringMVC的編碼過濾器配置

浏覽器伺服器互動的編碼格式介紹

問題:

在浏覽器和伺服器的資料互動流程中,處理英文資料以外還有中文資料。

浏覽器發起的請求資料中包含中文,伺服器響應的資料包含中文。而浏覽器

預設的編碼格式為iso-8859-1,也就說浏覽器預設發送給伺服器的請求資料的

編碼格式為iso-8859-1。同理,伺服器響應給浏覽器的資料,浏覽器在接受到後

會按照iso-8859-1的編碼格式來進行解碼擷取資料。但是tomcat伺服器使用的

編碼格式為utf-8,這樣造成,浏覽器發起的請求資料在伺服器端使用utf-8的格式

接收出現亂碼,伺服器響應的utf-8類型的資料被浏覽器解析時出現亂碼。一旦出 現亂碼問題,一定是編碼格式和解碼格式不一緻造成的,怎麼辦?

深度學習springMVC(三)SpringMVC的編碼過濾器配置, SpringMVC的靜态資源放行(看不懂你打我)SpringMVC的編碼過濾器配置SpringMVC的靜态資源放行

解決

客戶不會解決這個問題。是以格式需要在伺服器端進行解決

後端解決接收後的資料

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官方提供的編碼過濾器即可。

深度學習springMVC(三)SpringMVC的編碼過濾器配置, SpringMVC的靜态資源放行(看不懂你打我)SpringMVC的編碼過濾器配置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的靜态資源放行配置

深度學習springMVC(三)SpringMVC的編碼過濾器配置, SpringMVC的靜态資源放行(看不懂你打我)SpringMVC的編碼過濾器配置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.也就說,不要設定某個單元方法的路徑和靜态資源的路徑

是一緻,這樣就算配置了靜态資源放行,也會導緻靜态資源無法通路的問題。