2011-10-21 8 views
5

JavaサーブレットAPIでは、ServletContextを取得する唯一の方法は、HttpSessionJavadoc)のインスタンスを使用する方法です。ServletContextを取得するためにHttpSessionが必要なのはなぜですか?

セッションを作成する必要がなく、サーブレットコンテキストのみが必要な場合はどうすればよいですか?言い換えれば、HttpServletRequestクラスにgetServletContext()メソッドがないのはなぜですか?

EDIT

私はそれがその初期化時に、それを受けて以来、私は、サーブレット自体からServletContextを得ることができます知っています。しかし、サーブレットにリンクされていても、HttpServletRequestから取得することはできません。では、リクエストがあっても、サーブレットへの参照がないとどうなりますか?

答えて

8

getServletContext()は、HttpServletの親クラスであるGenericServletの一部なので、サーブレットの実装で呼び出すことができるはずです。

編集:それはあなたが前のバージョンを使用する必要がある場合は、リクエストとレスポンスのオブジェクトと一緒にコンテキストを渡す必要がありますように見えるので、

HttpServletRequestgetServletContext()ServletRequestからサーブレットので、3.0を継承します3.0。

+0

これは、その問題についてのことではありません。 –

+0

@Laurent、編集を参照してください。 – rsp

+1

+1:Servlet 3が最終的にこの不一致を修正したようです。 –

3

それはあなたのサーブレットクラスを使用すると、要求に行く必要はありませんのgetServletContext()メソッドを持ってい

+0

+1ただし、必ずしもそうではありません。場合によってはリクエストしかない場合があり、サーブレットのコンテキストへの唯一の方法はセッションを通してです。 –

+0

@LaurentPireynたとえば、サーブレットAPIを認識していない場合は、さらにレイヤーでリクエストを渡していますか?これは可能ですが、この場合は、疑問を失ってしまいます。まず、ServletContextを取得するのが良いアイデアであるかどうか。単に文脈を属性にプッシュしてはいけません。私たちの論理を再編成すべきではありません。等... – alf

+0

私は "酸っぱい葡萄"モードに入っています、ごめんなさい。とにかく、本当の問題は何ですか?私が信じる根拠は、メソッドの数を妥当なものに保つことです: 'getServletContext'が' HttpSession'にそれをしたのはもっと驚きです。 – alf

1

要求(サーバ、フィルタ、ページ)と協力し、すべてのエンティティがgetServletContext(またはinit())、独自のを持っていることだけです。

サーブレット自体はコンテナによって提供されるコンテキストを持ちますが、これは特定の要求とは関係ありません。

+0

これは、その質問についてではありません。 –

+0

@Laurentオリジナルの質問には、リクエストのみが利用可能であるという追加情報はありませんでした。 – djna

関連する問題