グローバルな文字化けの問題を解決するためのフィルターを作成する

フィルタの書き込み手順

  1. javax.servlet.Filterインターフェースを実装するクラスを作成します
  2. doFilterメソッドがフィルタリング機能を実行するインターフェイスのすべてのメソッドを書き直します
  3. フィルタを構成する
    1. web.xmlで構成する
    2. アノテーション@WebFilterを使用する

文字化けしたコードを解決するには、次のコードを追加する必要があります。req.setCharacterEncoding( "utf-8");文字セットはWebページのエンコーディングと一致している必要があります

EncodingFilter.java:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(filterName = "EncodingFilter", urlPatterns = "/*")
public class EncodingFilter implements Filter {
    
    

    public void init(FilterConfig config) throws ServletException {
    
    

    }


    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        HttpServletRequest request = (HttpServletRequest) req;
        // 判断是否是POST方法	在Tomcat8或以上中只有POST方法会出现乱码
        if ("POST".equals(request.getMethod())) {
    
    
            req.setCharacterEncoding("utf-8");	// 解决乱码	
        }
        chain.doFilter(req, resp);	// 这句话一定要执行 功能是放行	否则会一直阻塞在这里
    }

    public void destroy() {
    
    

    }

}

フィルタの実行プロセスは次のとおりです。

ここに画像の説明を挿入

  1. ユーザーはWebリソースの要求を送信します。フィルターが、Webリソースのアクセスアドレスが現在のフィルターと一致することを検出すると、フィルター内のコードが最初に実行されます。
  2. doFilter()メソッドを実行し、メソッド内でchain.doFilter(request、response)を呼び出します。その役割は解放することです。
  3. リリースされていない場合、リクエストはインターセプトされます。リクエストはWebリソースに到達できませんでした。
  4. リリース後、Webリソースが実行されます。応答が返ってくると、再びフィルターを通過します。

おすすめ

転載: blog.csdn.net/RookiexiaoMu_a/article/details/89422988