javaWebフィルター-フィルターフィルター実行プロセス

javaWeb filter-filter-filter実行プロセス

filter-filter実行プロセス

  • 学生がキャンパスに入るとき、彼は最初に警備員に会います、そして学生がキャンパスを離れる場合、彼はまた警備員に遭遇します
  • フィルター実行プロセス
    • Tomcatエンジンはhttpリクエストをリクエストオブジェクトに変換し、httpレスポンスをレスポンスオブジェクトに変換します
    • アドレスが条件を満たしている場合、リクエストと応答はdoFilterメソッドに渡されます
    • chain.doFilter(request、response)メソッドに渡します
    • 次に、サーブレットが3つの処理を完了したら、doGetメソッドまたはdoPostメソッドに渡します。
    • doFilterが残りのコードを実行した後、応答はブラウザーに戻ります
  • エンコーディングのコード位置を設定する
    • doFilterの前に要求エンコーディングを設定し、前に応答エンコーディングを設定します。
      ここに画像の説明を挿入

## filter-フィルターの実行順序

img

  • リクエストをフィルタリングする2つのフィルターがある場合、実行の順序は何ですか?
    最初にFilter1、次にFilter2、最後にサーブレット、その反対は応答が返される場合です
  • フィルターの実行順序を決定する設定は何ですか?

  • 構成
    解除複数のフィルターがある場合、フィルタークラスの最初の文字の順に実行されます。

    最初にAFilter、次にBFilter


  • 複数のフィルターがweb.xmlに準拠している場合のweb.xml構成<filter-mapping></filter-mapping>は、実行順に連続して配置されます。

##コードケース

AFilter:

package com.lbl.filter;

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

@WebFilter("/s2")
public class AFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第1个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第1个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

BFilter

package com.lbl.filter;

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

@WebFilter("/s2")
public class BFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第2个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第2个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

Demo02Servlet

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/s2")
public class Demo02Servlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("servlet执行了");
    }
}

実行結果:
ここに画像の説明を挿入

コメント@ WebFilter、xml構成に変更

OneFilter

package com.lbl.filter;

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

//@WebFilter("/s3")
public class OneFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第one个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第one个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

TwoFilter

package com.lbl.filter;

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

//@WebFilter("/s3")
public class TwoFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第two个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第two个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

Demo03Servlet

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebServlet("/s3")
public class Demo03Servlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Demo03Servlet....servlet执行了");
    }
}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Demo3Servlet</servlet-name>
        <servlet-class>com.lbl.servlet.Demo03Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo3Servlet</servlet-name>
        <url-pattern>/s3</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>TwoFilter</filter-name>
        <filter-class>com.lbl.filter.TwoFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>TwoFilter</filter-name>
        <url-pattern>/s3</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>OneFilter</filter-name>
        <filter-class>com.lbl.filter.OneFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OneFilter</filter-name>
        <url-pattern>/s3</url-pattern>
    </filter-mapping>
</web-app>

実行結果:

ここに画像の説明を挿入

フィルターフィルターのライフサイクル(理解)

フィルターには3つの方法があります。

  • initメソッド:サーバーの起動時にフィルターオブジェクトが作成されます
  • doFilterメソッド:要求のパスがフィルターを満たす構成済みパスである場合は常に、フィルターのdoFilterメソッドが1回実行されます
  • destroyメソッド:サーバーがシャットダウンするとフィルターが破棄されます

おすすめ

転載: blog.csdn.net/qq_37924905/article/details/108616779