web-dev-qa-db-ja.com

インターセプターとフィルターの違い-これは正しいですか?

私はこれを調査して、インタビューでよりよく対応できるようにしています。私は明確で簡潔な答えを探し回っています。

これまでのところ、私が間違っているか詳細が不足している場合は、必ず私を修正してください:

  1. フィルタはサーブレットAPIの一部であり、インターセプタはStruts 2です(ただし、明らかなようです)
  2. インターセプタースタックは、構成されたパッケージ内のリクエストで起動しますが、フィルターはマップされたURLにのみ適用されます。
  3. インターセプターは、excludeMethodsおよびincludeMethodsを介して、特定のターゲットアクションメソッドに応じて実行するかどうかを構成できますが、フィルターにはこの機能がありません。
  4. フィルターはインターセプターフィルターパターンの実装ですが、インターセプターはインターセプターパターンです。

これは正確で完全な答えのように見えますか?何かを追加または修正する必要がありますか?スレッドの問題/違いはどうですか?

12
user447607

最初のポイントは答えだと思いますが、おそらくあなたはただ以上のことを言うことができるはずです

インターセプターはStruts2にあり、フィルターはサーブレットAPIの一部です。

実際、インタビュアーとして、ServeltAPIとStruts2のようなWebアプリケーションフレームワークの違いを正確に説明することを期待し、期待しています。これは実際には、Java Webアプリのエコシステムとインフラストラクチャ全体についての理解を示すチャンスです。

良い答えが触れるかもしれません:

  1. Struts2フレームワークがサーブレットフィルター内でどのように実装されているか。

  2. Struts 2の外部で、同じWebアプリケーション内でサーブレットフィルターを必要とする特定のユースケースは何ですか?

  3. 実際、サーブレットAPI、Webアプリケーション、Webアプリケーションフレームワークなどとは何ですか?

これらすべてのトピックについてのあなたの理解を示した方法で答えることは、そこに求められていることだと思います。

3
chad

フィルタはサーブレットAPIからのものであり、インターセプターはStruts 2からのものです。違いは、Webアプリケーションとエンタープライズアプリについて話すときに発生します。フィルターはWebアプリケーションでのみ使用されますが、インターセプターはWebとエンタープライズアプリケーションで使用できます。両方のライフサイクル方法も異なります。

インターセプタースタックは、リクエストごとに起動します。フィルタは、それらが定義されているURLにのみ適用されます。必要に応じてどちらか一方を使用します。すべてのリクエストにCookieが存在することを確認する必要があるとします。インターセプターを使用します。一部のリクエスト(URLによって駆動される)で外部アプリをポップアップする必要があるとしましょう。フィルターを使用します。

2
graphics123

インタビューの1つで、私はこの質問に次のように答えました。

インターセプターはstruts2の概念であり、アプリケーション開発者がそれを制御できます。また、struts2アプリケーションの境界で動作し、Struts2グッズとともにActions、ValueStack、その他のオブジェクトにアクセスできます。

フィルタは展開時間の構成に適しています。アプリケーションへのアクセスが制限されており、ほとんどの場合、サーバーにデプロイされているほとんどのWebアプリの汎用です。

コード内のロジックがアプリケーションとより結合されている場合、インターセプターに適している場合、またはインフラストラクチャの場合は、サーブレットフィルターに配置できます。

1
Vh24

フィルター:

  1. サーブレット仕様に基づく
  2. リクエストのパターン一致で実行されます。
  3. 構成できないメソッド呼び出し。

インターセプター:

  1. Struts2に基づいています。
  2. フロントコントローラー(サーブレットフィルター)の対象となるすべての要求に対して実行されます。また、特定のアクションの実行に対して追加のインターセプターを実行するように構成できます。
  3. インターセプターのメソッドは、excludeMethodsまたはincludeMethodsを使用して実行するかどうかを構成できます。
0