リクエストディスパッチャの転送方法とサーブレットチェーンの概念の違いは何ですか?
例
RequestDispatcher rd= req.getRequestDispatcher("pathToServlet");
rd.forward(req,resp);
これは、クライアント(ブラウザー)の対話を伴わずに要求を転送することです。しかし、サーブレットチェーンを使用して同じことを達成できますか?できれば違いは何ですか?
違いはありません。「サーブレットチェーン」は、サーブレットフィルタが存在しなかったダークJ2EE 1.1/1.2時代に造られた用語です。実際、これは基本的に、あるRequestDispatcher#forward()
サーブレットから他のサーブレットに転送するために使用するアプローチです(そして、応答がコミットされていないことを確認します。そうしないと、結果が生じIllegalStateException
ます)。
J2EE 1.3(サーブレット2.3、10年以上前にすでに!)以降、サーブレットフィルタが導入され、プロセスが非常にクリーンで簡単になりました。それ以来、「サーブレットチェーン」は嫌われ、通常は「悪い設計」とマークされています。最近では、最終的には1つのフロントコントローラーサーブレットと複数のビジネスモデルだけになりたいと考えています。
「チェーン」の概念は、メソッドを使用する代わりにサーバーを構成することに関連しているため、forward()
特定のタイプのリクエストを構成して、サーブレットの特定のチェーンをアクティブ化できるということだと思います。
たとえば、リクエストがイントラネット内からのものである場合、ユーザーに内部広告を表示させたい場合があります。AddInternalBanner
したがって、これらすべてのリクエストを最初にサーブレットとして処理することができます。
このforward()
メソッドは、特定のサーブレットがリクエストを渡す必要があると判断した場合に役立ちます。