SpringMvc---設置請求編碼格式和響應編碼格式


 

get請求亂碼

當get請求出現亂碼,只需要到tomcat的conf目錄下修改server.xml文件,在配置端口號的地方,設置端口號后加上,空格

URIEnconding="UTF-8"

 

post請求亂碼

在web.xml文件中注冊CharacterEncodingFilter過濾器【Spring自帶的】,通過CharacterEncodingFilter過濾器設置請求和響應參數編碼格式。

首先能看見CharacterEncodingFilter中有三個參數,其中encoding代表編碼,另兩個分別代表是否強制請求編碼格式為xxx,是否強制響應編碼格式為xxx。

 

在CharacterEncodingFilter源碼【一部分】中:

private String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
​
public CharacterEncodingFilter() {
    this.forceRequestEncoding = false;
    this.forceResponseEncoding = false;
}

 

 

然后在具體處理過濾請求的方法【doFilterInternal】中,可以看見在設置了encoding后就會將請求編碼格式設置為你設置的請求編碼格式。

在下面的判斷中可以發現,當設置了請求參數后,第一個判斷的判斷條件中,它是判斷,第一個條件默認是false,並沒有對他修改,所以他是false ;第二個條件也沒有設置,他的值為true,最后結果為true,這樣就把請求編碼格式改為UTF-8。

第二個判斷,只有一個條件,就是得你自己在filter的初始化參數中定義【forceResponseEncoding】的值,當定義后,響應的編碼格式就會變成你設置的格式。

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    String encoding = this.getEncoding();
    if (encoding != null) {
        if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) {
            request.setCharacterEncoding(encoding);
        }
​
        if (this.isForceResponseEncoding()) {
            response.setCharacterEncoding(encoding);
        }
    }
​
    filterChain.doFilter(request, response);
}

 

 

設置如下:

<!--設置請求編碼和相應編碼解決post請求的亂碼問題-->
<!--使用CharacterEncodingFilter解決亂碼問題,服務器啟動時先初始化監聽器在初始化過濾器,所以這個過濾器設置在哪里都不會影響他的初始化-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--設置請求編碼,通過設置filter初始化參數,告訴CharacterEncodingFilter類修改請求編碼-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
<!--設置響應編碼,通過設置forceResponseEncoding的值告訴CharacterEncodingFilter類修改相應編碼-->
        <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>
 

 

 

 

 

 

 


免責聲明!

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



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