使用Filter介面編寫過濾器解決post亂碼

文采杰出發表於2024-07-03

在使用tomcat9以及之前的版本,request-character-encoding和response-character-encoding使用的字元編碼預設不是utf-8,所以導致前端傳送到後臺的中文亂碼.如果使用的是tomcat10以及之後的版本,在apache-tomcat-10.1.25\conf\web.xml已設定好預設的字符集編碼為utf-8,如果所示:

所以使用tomcat9以及之前的版本,可以手動編寫過濾器來處理中文亂碼:

  • 首先編寫實現Filter介面的實現類
package com.powernode.springmvc.filter;

import jakarta.servlet.*;

import java.io.IOException;

public class CharacterEncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //設定請求體的字符集
        request.setCharacterEncoding("utf-8");
        //設定響應體的字符集
        response.setCharacterEncoding("utf-8");
        //執行下一步
        chain.doFilter(request,response);
    }
}
  • 然後在web.xml中,定義過濾器的名稱等

    <!--配置字元編碼過濾器-->
    <filter>
        <!-- 定義過濾器的名稱,這個名字是唯一的,並且在整個web.xml檔案中被引用 -->
        <filter-name>characterEncodingFilter</filter-name>
        <!-- 定義過濾器的全類名,即這個過濾器實現類的完整路徑 -->
        <filter-class>com.powernode.springmvc.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

這樣提交post中含有中文就不會亂碼了.

相關文章