理由
servletRequestインターフェースのgetRequestDispatcher(String path)は、現在のサーブレットコンテキスト外に拡張できません
where as
servletContextのgetRequestDispatcher(String path)は、getContext(String uripath)メソッドを使用して、外部コンテキストのリソースのRequestDispatcherを取得できます。
そしてどのように??
助けてください
(_"/index.jsp"
_)などの絶対パスを使用する場合、違いはありません。
相対パスを使用する場合は、HttpServletRequest.getRequestDispatcher()
を使用する必要があります。 ServletContext.getRequestDispatcher()
は許可しません。
たとえば、_http://example.com/myapp/subdir
_でリクエストを受け取った場合、
_ RequestDispatcher dispatcher =
request.getRequestDispatcher("index.jsp");
dispatcher.forward( request, response );
_
リクエストをページ_http://example.com/myapp/subdir/index.jsp
_に転送します。
いずれの場合でも、コンテキスト外のリソースにリクエストを転送することはできません。
request.getRequestDispatcher(“ url”)は、ディスパッチが現在のHTTPリクエストに対して相対的であることを意味します。これは、同じWebアプリケーションで2つのサーブレットをチェーンするためのものであることを意味します。
RequestDispatcher reqDispObj = request.getRequestDispatcher("/home.jsp");
getServletContext()。getRequestDispatcher(“ url”)は、ディスパッチがServletContext.Meansのルートに対して相対的であることを意味します。これは、同じサーバー/ 2つの異なるサーバーで2つのWebアプリケーションをチェーンするためのものです。
例
RequestDispatcher reqDispObj = getServletContext().getRequestDispatcher("/ContextRoot/home.jsp");
リクエストメソッドgetRequestDispatcher()
は、単一のwebapp内のローカルサーブレットを参照するために使用できます。
サーブレットコンテキストベースのgetRequestDispatcher()
メソッドは、[〜#〜] same [〜#〜]サーバーにデプロイされた他のWebアプリケーションからサーブレットを参照するために使用できます。
コンテキストはアプリケーションレベルのスコープに保存されますが、リクエストはページレベルに保存されます。
Web Containerはアプリケーションを1つずつ起動し、JVM内で実行します。 jvmにシングルトンオブジェクトを格納し、その中に置かれたオブジェクトを登録します。このシングルトンは、コンテナ自体のJVM内に格納されているため、内部で実行されているすべてのアプリケーションで共有されます。
ただし、リクエストの場合、コンテナはリクエストからのデータで満たされたリクエストオブジェクトを作成し、1つのスレッドから別のスレッドに渡されます(各スレッドはサーバーに送られる新しいリクエストです)。また、リクエストは同じアプリケーション。
最初の質問は、単に範囲の問題だと思います。 ServletContextは、単一のリクエストであるServletRequestよりもはるかに広いスコープのオブジェクト(サーブレットコンテキスト全体)です。詳細については、サーブレット仕様自体を参照してください。
方法については、申し訳ありませんが、現時点で他の人が答えられるようにそれを残す必要があります。