springmvc配置過濾器時,訪問html頁面出現亂碼問題


在學習springmvc的時候,在jsp頁面使用post的方式提交表單,然后就出現亂碼了,於是使用springmvc提供的過濾器進行過濾,過濾器代碼如下:

 2     <filter>
 3         <filter-name>characterEncodingFilter</filter-name>
 4         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class
 6         <init-param>
 7             <param-name>encoding</param-name>
 8             <param-value>utf-8</param-value>
 9         </init-param>
18         <init-param>
19             <param-name>forceRequestEncoding</param-name>
20             <param-value>true</param-value>
21         </init-param>
24         <init-param>
25             <param-name>forceResponseEncoding</param-name>
26             <param-value>true</param-value>
27         </init-param>
28     </filter>
29     <filter-mapping>
30         <filter-name>characterEncodingFilter</filter-name>
31         <!--
32         /*:表示強制所有的請求先通過過濾器處理
33         參考視頻地址:https://www.bilibili.com/video/BV1sk4y167pD?p=17
34         -->
35         <url-pattern>/*</url-pattern>
36     </filter-mapping>

值得注意的是,我的html頁面也是指定了utf-8的編碼的。html頁面的代碼如下:

 1 !DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="utf-8">
 5     <title>這是一個靜態頁面</title>
 6 </head>
 7 <body>
 8     這是一個靜態頁面
 9 </body>
10 </html>

但是啟動服務器訪問就是亂碼,我單獨將這個文件使用瀏覽器打開,頁面是沒有亂碼的。這說明應該是我服務器配置的問題。

通過查閱資料,將過濾器的forceResponseEncoding去掉即可,也就是不強制響應頭使用utf-8的編碼。具體的原因還是有點懵逼,但是我看了很多人的代碼

他們配置過濾器的時候,是不會配置forceResponseEncoding、forceRequestEncoding的,也就是使用最多的是一下的過濾器代碼:

2     <filter>
 3         <filter-name>characterEncodingFilter</filter-name>
 4         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class
 6         <init-param>
 7             <param-name>encoding</param-name>
 8             <param-value>utf-8</param-value>
 9         </init-param>
28     </filter>
29     <filter-mapping>
30         <filter-name>characterEncodingFilter</filter-name>
31         <!--
32         /*:表示強制所有的請求先通過過濾器處理
33         參考視頻地址:https://www.bilibili.com/video/BV1sk4y167pD?p=17
34         -->
35         <url-pattern>/*</url-pattern>
36     </filter-mapping>

  至於為什么強制了響應頭response的編碼方式,訪問html頁面會造成亂碼,這具體的原因還是不知道。以后使用springmvc配置的時候,如果配置過濾器就要留點心了。我在網上也找到了和我一樣問題的人,參考博客地址:

https://blog.csdn.net/Knightletter/article/details/108394048?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

 

這是我使用第一種處理靜態資源的方法處理出現的問題,也就是由springmvc轉發給tomcat默認的servlet處理靜態資源的方式。

第二種方式的,是使用springmvc自帶的ResourceHttpRequestHandler這個處理器對象進行處理,也就是在springmvc的配置文件中加入以下配置:

 

 <mvc:resources mapping="/static/**" location="/static/"/>

 

這里我將所有的靜態資源都放在了一個名為static文件夾下,如下圖所示:

 

  這樣就可以避免配置多個<mvc:resources了。並且第二種方式就算過濾器的response強制了編碼,訪問靜態頁面的時候還是不會亂碼的。並且第二種方法更加符合實際開發的使用。所以處理springmvc處理靜態資源文件的話,都是建議使用第二種方式。

參考視頻地址:https://www.bilibili.com/video/BV1sk4y167pD?p=38

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM