サーブレット、フィルター、リスナー、インターセプター間の違いと接続
1。コンセプト
1.サービス:サーブレットは、プラットフォームおよびプロトコルに依存しない機能を備えたサーバー側を実行しているJavaアプリケーションであり、クライアント要求とサーバー応答の間の中央の層で動作するWebページを動的に生成できます。
2.フィルター:フィルターは、HTTP要求、応答、ヘッダー情報を変換するために使用できる再利用可能なコードスニペットです。フィルターはサーブレットのようなものではありません。リクエストや応答を生成することはできません。特定のリソースへの要求を変更するか、特定のリソースからの応答を変更するだけです。
3。リスナー:リスナー、文字通り、リスナーは主にリスニングのみに使用されることがわかります。リスナーを介して、Webサーバーで実行アクションを聴き、その要件に応じて対応する応答を行うことができます。
簡単に言えば、アプリケーション、セッション、およびリクエストの3つのオブジェクトが作成されたとき、または変更と削除属性が追加されたときにコードを自動的に実行する機能コンポーネントです。
4. Interceptor:これは、サービスまたはメソッドの前にメソッドを呼び出すか、メソッドの後にメソッドを呼び出すための接線方向でプログラミングしています。
たとえば、動的プロキシは、インターセプターの簡単な実装です。メソッドを呼び出す(または他のビジネスロジック操作を実行する)前に文字列を印刷したり、メソッドを呼び出した後に文字列を印刷したり、例外をスローするときにビジネスロジック操作を行うこともできます。
5。サーブレット、フィルター、リスナーはweb.xmlに構成され、インターセプターはweb.xmlに構成されていない、strutsインターセプターはstruts.xmlに構成されています。 SpringのインターセプターはSpring.xmlに構成されています。
2。注文の読み込み
web.xmlの読み込み順序は:Context -Param->リスナー - >フィルター - >サーブレットです
3。責任
1.サービス:
(1)クライアントリクエストの性質に基づいて動的なコンテンツを含む完全なHTMLページを作成して返す
(2)既存のHTMLページに埋め込むことができるHTMLページ(HTMLフラグメント)の一部を作成する
(3)クライアントから送信された非表示データを読み取ります
(4)クライアントが送信した表示データを読み取ります
(5)他のサーバーリソース(データベースおよびJavaアプリケーションを含む)と通信する
(6)ステータスコードと応答ヘッダーを使用して、非表示データをクライアントに送信します。
2.フィルター:
(1)リクエストがサーブレットに到達する前に、フィルターはユーザーのリクエストを事前に処理できます。また、サーブレットを離れるときにHTTP応答を処理することもできます
(2)サーブレットを実行する前に、最初にフィルタープログラムを実行し、そのためにいくつかの前処理作業を行います。
(3)プログラムのニーズに応じてリクエストと応答を変更する
(4)サーブレットが呼び出された後、サーブレットの実行をインターセプトします。
3.Listener:
8つのリスナーインターフェイスは、次のように、3つのカテゴリに分けることができます。
(1)ServletContextに関連するListne Rインターフェイス。を含む:servletContextListener、servletcontextattributeListener
(2)httpsesssionに関連するリストナーインターフェイス。を含む:httpsessionListner、httpssessionAttributeListener、httpsessionbindinglistener、httpssessionactivationActivationListener
(3)ServletRequestに関連するリスナーインターフェイス、ServletRequestlistner、ServletRequestattributElistenerを含む
4。違い
1.サービス:サーブレットプロセスは短いです。 URLが送信された後、処理されてから返されるか、あなたが指定したページにターンします。主にビジネス処理前に制御するために使用されます。
2.フィルター:プロセスはスレッドされています。 URLが送信された後、チェック後、元のプロセスを下方に保持し、次のフィルター、サーブレットなどで受信でき、サーブレットを処理した後、下向きに渡され続けません。
フィルター関数を使用して、プロセスを元の方法で維持するか、プロセスを支配しますが、サーブレット関数は主にプロセスを支配するために使用されます。フィルターは、サーブレットのサプリメント(ソフトワイプ)と見なすことができます。
フィルターは、サーブレットの「バリアント」と見なすことができます。これは主にユーザーリクエストを前処理するために使用され、httpservletResponseを後処理することもできます。典型的な処理チェーンです。
それとサーブレットの違いは、ユーザーに直接応答を生成できないことです。
完全なプロセスは次のとおりです。フィルタープリプロセスユーザーリクエストは、リクエストをサーブレットに処理して処理して生成し、最後にサーバーの応答をポストプロセスをフィルタリングします。
3。一致するルール
リクエストがサーブレットコンテナに送信されると、コンテナは最初に要求されたURLをサーブレットマッピングURLとして現在のアプリケーションコンテキストパスに減算します。たとえば、http://localhost/test/aaa.htmlにアクセスしています(アプリケーションのコンテキストはテストです)。
コンテナはhttp:// localhost/tesを削除し、残りの/aaa.htmlパーツを使用してサーブレットマッピングに一致させます。つまり、残りの部分を使用して、web.xmlで構成されたサーブレットのURLパターンを一致させます。
注:このマッピングマッチングプロセスには特定のルールがあり、各マッチは最終的に1つのサーブレットのみと一致します。 (これはフィルターとは異なります)
サーブレットマッチングルール:サーブレットが正常に一致する場合、それはそれ以上一致しません
正確なパスマッチング:
例:たとえば、ServletaのURLパターンは /テスト、ServletBのURLパターンは /*です。この時点で、URL I Accessがhttp:// localhost/testの場合、
現時点では、コンテナは最初に正確なパスマッチングを実行し、 /テストがServletaによって正確に一致していることがわかります。そのため、Servletaを呼び出して、他のサーブレットに注意を払いません。
最長のパスのマッチング:
例:servletaのurl-patternは/test/*で、servletbのurlパターンは/test/a/*です。 http:// localhost/test/aにアクセスするとき、
コンテナは、一致する最長のパスを持つサーブレットを選択します。これはここのサーブレットです。
拡張マッチング:URLの最後のセグメントに拡張機能が含まれている場合、コンテナは拡張機能に基づいて適切なサーブレットを選択します。
例:servletaのurl-pattern: *。action
4.サーブレットとフィルターはすべてURLなどを対象としていますが、リスナーはセッションの作成やセッションの発生などのオブジェクトを対象としています。
スプリングを統合し、属性をStrutsのアクションに統合し、Webアプリケーションのタイミングタスク、オンラインユーザーの数に関する統計などを統合することができます。
5.フィルターと同様のインターセプターインターセプターですが、struts.xmlで構成され、web.xmlではなく、アクション用に構成されています。ページがアクションを提出するとき、
フィルタリング操作の実行は、Struts1.xによって提供されるプラグインメカニズムと同等です。前者はStruts1.xが提供するフィルターであり、インターセプターはStruts2によって提供されるフィルターと見なすことができます。
フィルターとの違い:
(1)web.xmlで構成されていませんが、struts.xmlで構成されており、アクションを使用しています(2)アクション自体は、それを受信する前に物事を行うために使用するインターセプターを指定できます
6. struts2のフィルターとインターセプターの違いと接続:
(1)インターセプターはStruts2によって提供され、フィルターはサーブレット標準によって提供されます
(2)インターセプターはターゲットアクションのターゲット方法をインターセプトし、フィルターはさまざまなWebリソースをターゲットにします
(3)インターセプターはstruts.xmlで構成され、フィルターはweb.xmlファイルで構成されています
(4)インターセプターはインターセプタースタックを使用して一緒に編成され、フィルターは傍受されたリソースに従ってリンクされます。実行の順序は、構成ファイルの位置によって決定されます。
(5)インターセプターはJava反射メカニズムに基づいており、フィルターは機能コールバックに基づいています。
(6)フィルターはサーブレット容器に依存しますが、インターセプターはサーブレット容器に依存しません。
(7)インターセプターはアクションリクエストでのみ動作しますが、フィルターはほぼすべてのリクエストで動作できます。
(8)インターセプターは、アクションコンテキストと値スタックでオブジェクトにアクセスできますが、フィルターはできません。
(9)アクションのライフサイクル中に、インターセプターは複数回呼び出すことができますが、フィルターはコンテナが初期化されたときに1回のみ呼び出すことができます。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!