フィルタの書き込み手順
- javax.servlet.Filterインターフェースを実装するクラスを作成します
- doFilterメソッドがフィルタリング機能を実行するインターフェイスのすべてのメソッドを書き直します
- フィルタを構成する
- web.xmlで構成する
- アノテーション@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() {
}
}
フィルタの実行プロセスは次のとおりです。
- ユーザーはWebリソースの要求を送信します。フィルターが、Webリソースのアクセスアドレスが現在のフィルターと一致することを検出すると、フィルター内のコードが最初に実行されます。
- doFilter()メソッドを実行し、メソッド内でchain.doFilter(request、response)を呼び出します。その役割は解放することです。
- リリースされていない場合、リクエストはインターセプトされます。リクエストはWebリソースに到達できませんでした。
- リリース後、Webリソースが実行されます。応答が返ってくると、再びフィルターを通過します。