JAVAWEB-フィルター(フィルター)、主な書き込み手順、アクセス方法、フィルターのライフサイクルとAPIの詳細

1。フィルタの概要

フィルタは、クライアントのリソースへのアクセスをフィルタリングするためのものです。条件が満たされた場合は解放され、条件が満たされない場合は解放されず、ターゲットリソースへのアクセスの前後に論理処理を実行できます。

2、準備ステップ

  • Filterインターフェースを実装するフィルタークラスを作成します
  • インターフェイスにまだ実装されていないメソッドを実装する
  • web.xml設定する(主にフィルタするように構成されているリソース)

ケース:
最初のステップ:インターフェースを実装し、メソッドを書き直します

public class QuickFilter1 implements Filter{
    
    
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
    
    
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
    
    
		// TODO Auto-generated method stub
		System.out.println("quick1 running...");
		//放行请求
		chain.doFilter(request, response);
	}
	
	@Override
	public void destroy() {
    
    
		// TODO Auto-generated method stub
		
	}

ステップ2:構成web.xmlファイル

<filter>
  		<filter-name>QuickFilter1</filter-name>
  		<filter-class>com.filter.filter.QuickFilter1</filter-class>
  </filter>
  <filter-mapping>
  		<filter-name>QuickFilter1</filter-name>
  		<!--对该web应用下的所有的资源进行过滤  -->
  		<url-pattern>/*</url-pattern>
  </filter-mapping>

ステップ3:テスト用のサーブレットを作成する

public class Servlet1 extends HttpServlet {
    
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
	response.getWriter().write("Servlet1 running...");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		doGet(request, response);
	}
}

注意:
chain.doFilter(request, response)
このコードを記述しないと、Servlet1のコンテンツにアクセスできなくなります。このコードを記述した場合、必要に応じてServlet1のコンテンツにアクセスします。これはリリースリクエストです。

3、フィルターアクセスプロセス

を構成するときは<url-pattern>/*</url-pattern>、Webアプリケーション全体をフィルタリングします。実際、サーブレットにアクセスすると、複数のフィルターを通過します、これらを渡したい場合は、複数のフィルターがチェーンを形成します。chain.doFilter(request,response)リリースするには、すべて上記を実行する必要があります。
ここに写真の説明を挿入

四。フィルタのライフサイクルとAPIの詳細な説明

1.フィルターのライフサイクルとそれに関連する方法

フィルタインターフェイスには、次の3つの方法があります。

  • init(Filterconfig):フィルターオブジェクトの作成時に実行されるフィルターオブジェクト初期化メソッドに代わって
  • doFilter(ServletRequest,ServletResponse,FilterChain):フィルター実行のコアメソッドを表します。リソースがこのフィルターにフィルター処理用に構成されている場合、リソースにアクセスするたびにdoFilterメソッドが実行されます。
  • destory():フィルターオブジェクトが破棄されたときに実行されるフィルター破棄メソッドを表します

2. Filterオブジェクトのライフサイクル:

  • フィルタはいつ作成されますか:サーバーの起動時にフィルタオブジェクトが作成されます
  • フィルタが破棄されるタイミング:サーバーが閉じられるとフィルタが破棄されます

3.フィルターの詳細なAPI

  • init(FilterConfig)方法
    パラメータconfigは、Filterオブジェクトの構成情報のオブジェクトを表し、内部カプセル化はフィルターの構成情報です。

場合:

最初のステップ:最初にweb.xmlコンテンツを書く

<filter>
  		<filter-name>QuickFilter1</filter-name>
  		<filter-class>com.filter.filter.QuickFilter1</filter-class>
  		<init-param>
  			<param-name>aaa</param-name>
  			<param-value>AAA</param-value>
  		</init-param>
  </filter>
  <filter-mapping>
  		<filter-name>QuickFilter1</filter-name>
  		<!--对该web应用下的所有的资源进行过滤  -->
  		<url-pattern>/*</url-pattern>
  </filter-mapping>

ステップ2:initメソッドを使用してweb.xmlの情報を取得します

@Override
	public void init(FilterConfig filterConfig) throws ServletException {
    
    
		//获得web.xml中的filter的名称——————
		//<filter-name>QuickFilter1</filter-name>
		filterConfig.getFilterName();
		//获得当前filter的初始化参数
		filterConfig.getInitParameter("aaa");
		//获得ServletContext
		filterConfig.getServletContext();
	}
  • destory()方法
    フィルタオブジェクトが破棄されたときに実行され、サーバーが閉じられたときに実行できます。

  • doFilter方法
    doFilter(ServletRequest、ServletResponse、FilterChain)
    パラメータの中で:

  • ServletRequest/ServletResponse:doFilterメソッドが実行されるたびに、Webコンテナーは、doFilterのパラメーターとして要求および応答オブジェクトを作成する責任があります。要求と応答は、ターゲットリソースのサービスメソッドにアクセスするときの要求と応答です。

  • FilterChain:チェーンオブジェクトをフィルタリングします。リクエストは、オブジェクトのdoFilterメソッドを介して解放できます。彼は私たちのフィルターオブジェクトをFilterChainオブジェクトに入れます。フィルタの順序は、記述されたweb.xmlの順序に従って実行されます。

場合:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Filter</display-name>
 
  <filter>
  		<filter-name>QuickFilter1</filter-name>
  		<filter-class>com.filter.filter.QuickFilter1</filter-class>
  		<init-param>
  			<param-name>aaa</param-name>
  			<param-value>AAA</param-value>
  		</init-param>
  </filter>
  <!-- 注意此处的filter-mapping-->
  <filter-mapping>
  		<filter-name>QuickFilter1</filter-name>
  		<!--对该web应用下的所有的资源进行过滤  -->
  		<url-pattern>/*</url-pattern>
  </filter-mapping>
    <!-- 注意此处的filter-mapping-->
  <filter>
  		<filter-name>QuickFilter2</filter-name>
  		<filter-class>com.filter.filter.QuickFilter2</filter-class>
  </filter>
  <filter-mapping>
  		<filter-name>QuickFilter2</filter-name>
  		<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

注意:
web.xmlでは、QuickFilter1は<filter-mapping>QuickFilter2の<filter-mapping>前にありますしたがって、フィルターを使用する場合、filter1が最初にフィルターされ、次にfilter2がフィルターされます。
示されているように:
ここに写真の説明を挿入

4.4。フィルタのweb.xml構成ファイル

url-patternを構成する場合、次の3つの記述方法があります。

  • 完全に一致:/ sertvle1
  • ディレクトリマッチング:/ aaa / bbb / *
  • 拡張機能のマッチング:* .abc * .jsp

注意:Url-patternは、servlet-nameに置き換えるか
、次のように組み合わせることができます。

<filter-mapping>
  		<filter-name>QuickFilter1</filter-name>
  		<!--对该web应用下的所有的资源进行过滤  -->
  		<!-- <url-pattern>/*</url-pattern> -->
  		<servlet-name>Servlet1</servlet-name>
  </filter-mapping>

フィルタには別の設定方法があります。

発車係

  • REQUEST:デフォルト値。これは、リソースに直接アクセスしたときにフィルターが実行されることを意味します。
  • FORWARD:転送時にのみフィルターが実行されます
  • INCLUDE:リソースが含まれているときにフィルターを実行する
  • ERROR:エラー発生時にジャンプするのはフィルターを実行することです

次のように:

<filter-mapping>
  		<filter-name>QuickFilter1</filter-name>
  		<!--对该web应用下的所有的资源进行过滤  -->
  		<!-- <url-pattern>/*</url-pattern> -->
  		<!-- <servlet-name>/Servlet1</servlet-name> -->
  		<url-pattern>/*</url-pattern>
  		<dispatcher>可以再次进行上述配置</dispatcher>
  </filter-mapping>

おすすめ

転載: blog.csdn.net/Mr_GYF/article/details/109299695