javax.servlet.Servlet
の
void service(ServletRequest req, ServletResponse res)
メソッドがServletResponse
単にそれを返すのではなく、パラメータとして与えられている理由はありますか?
JavaサーブレットAPIは抽象化であり、あらゆる種類の要求を処理するためにJava Webアプリケーションに必要な最小要件を定義します(これを見ると、ほとんどすべてのクラスがインターフェースまたは抽象クラスとして定義されていることがわかります)。
このAPIは、さまざまなJavaサーバーベンダー(IBM、Sun、Apache、Oracleなど)が最小要件に合意したプロセスの後にJCPによって定義されたため、現在公式標準と見なされているものが定義されています。ただし、ベンダーが異なれば、サーブレットコンテナを実装する方法も異なり、現在ではその数も異なります(それぞれが異なる機能を備えています)。
サーブレットコンテナは、両方を適切に処理するために両方のオブジェクト(要求と応答)を追跡する必要があるため、ユーザーに対してServletResponse
(またはHTTPバリアントHttpServletResponse
)を作成する責任を活用することはできません-内部にあるものを覚えておいてくださいサーブレットのservice
メソッドはユーザーコードです。したがって、サーブレットコンテナは、service
メソッドを呼び出す前に、(独自の実装を使用して)要求オブジェクトと応答オブジェクトを作成して事前入力します。ユーザーの観点からは、インターフェイスを介してそれらを処理するだけで十分であり、両方のオブジェクトの実際の実装にアクセスできないため、ベンダー固有のコードも保護されます。
APIは、これらのベンダーがそれを実現定義されたとき、彼らはラッパー(のセットに含まのでしかし、いくつかのケースでは、ユーザーがこれらのオブジェクトのいずれかのデフォルトの動作をオーバーライドしたいと思いHttpServletRequestWrapper
、HttpServletResponseWrapper
ユーザーコードによって拡張することができ、など)サーブレットまたはフィルターのいずれかで使用され、コンテナーによって提供されるデフォルトの実装を置き換えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加