ServletとFilterの違いは何ですか?ページの承認に使用することをお勧めしますか?
特定の条件に基づいてリクエストをフィルタおよび/または変更する場合は、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);
}
}
フィルターは承認に最適です。これは、サイトのすべてのページで実行するように構成できるためです。したがって、すべてのページを保護するために必要なフィルターは1つだけです。
フィルターを使用すると、サーブレットのパフォーマンスを向上させることができます。リクエストが来たら、リクエストの前処理を実行できます。リクエストが満たされた場合は、サーブレットに転送します。