1. 程式人生 > 其它 >SpringMVC框架實踐中出現的中文亂碼問題解決,為什麼POST請求亂碼?

SpringMVC框架實踐中出現的中文亂碼問題解決,為什麼POST請求亂碼?

在練習SpringMVC框架的時候,對於前端的get或post請求時,我們總是碰到get請求方式中文正常編譯,但是對於post的請求,總是會出現亂碼的問題。如何解決呢,新增過濾器的配置即可。

在web.xml中配置過濾器就好了。程式碼在後邊:

那具體產生的原因是?

SpringMVC的底層其實就是Servlet的實現。

瀏覽器向伺服器傳送請求,是以請求協議包的形式完成的,請求協議包結構如下:

當請求協議包進到伺服器端之後,get請求方式,引數資訊包裹在請求頭中,Http伺服器用utf-8字符集進行解碼,而對於post的請求方式,引數資訊包裹在請求體中,Http伺服器用的ISO-8859-1字符集

進行解碼(這是東歐語系),所以就會產生post請求亂碼。

<!--註冊宣告過濾器,解決post請求亂碼問題-->
        <filter>
            <filter-name>characterEncodingFilter</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>
            <!--強制請求物件(HttpServletRequest)encoding編碼的值-->
            <init-param>
                <param-name>forceRequestEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
            <!--設定強制應答物件(HttpServletResponse)的編碼值-->
            <init-param>
                <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>