web-dev-qa-db-ja.com

サーブレットとフィルター

ServletFilterの違いは何ですか?ページの承認に使用することをお勧めしますか?

54
Dejell

特定の条件に基づいてリクエストをフィルタおよび/または変更する場合は、Filterを使用します。 制御、前処理、後処理、またはその両方リクエストを行う場合は、Servletを使用します。

Java EEチュートリアル では、フィルターについて次のことに言及しています。

フィルターは、要求または応答のヘッダーとコンテンツ(または両方)を変換できるオブジェクトです。フィルターは通常、それ自体が応答を作成しないという点でWebコンポーネントとは異なります。代わりに、フィルターは、あらゆる種類のWebリソースに「接続」できる機能を提供します。したがって、フィルターは、フィルターとして機能するWebリソースに依存してはなりません。このようにして、複数のタイプのWebリソースで構成できます。

フィルターが実行できる主なタスクは次のとおりです。

  • 要求を照会し、それに応じて行動します。
  • 要求と応答のペアがそれ以上通過するのをブロックします。
  • 要求ヘッダーとデータを変更します。これを行うには、カスタマイズされたバージョンのリクエストを提供します。
  • 応答ヘッダーとデータを変更します。これを行うには、カスタマイズされたバージョンの応答を提供します。
  • 外部リソースと対話します。

承認には、Filterが最適です。ログインしたユーザーのリクエストをフィルターがチェックする方法の基本的なキックオフの例を次に示します。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        // User is not logged in. Redirect to login page.
        ((HttpServletResponse) response).sendRedirect("login");
    } else {
        // User is logged in. Just continue with request.
        chain.doFilter(request, response);
    }
}
96
BalusC

フィルターは承認に最適です。これは、サイトのすべてのページで実行するように構成できるためです。したがって、すべてのページを保護するために必要なフィルターは1つだけです。

20
kgiannakakis

フィルターを使用すると、サーブレットのパフォーマンスを向上させることができます。リクエストが来たら、リクエストの前処理を実行できます。リクエストが満たされた場合は、サーブレットに転送します。

3
Navnath Adsul