2

servletエラーページ"error.jsp"にリダイレクトしようとすると、response.sendRedirect("/error.jsp")ページが見つからないというエラーが表示されますが、response.sendRedirect("error.jsp") に変更すると正常に動作します!

なぜそうなのですか?相対パスが機能しないのはなぜですか? error.jspフォルダに保存されWEB-CONTENTます。は、とが同じディレクトリにあるdispatcher.foreward(request,response)場合でも、相対 URL "/page01.jsp" で正常に動作します。説明してください。page01.jsperror.jspWEB-CONTENT

ありがとう!

4

4 に答える 4

8

まず、いくつかの語彙をクリアしましょう。

  • error.jsp相対パスの./../error.jsp

  • /page01.jspおよび絶対パス/app/page.htmlの例

質問に戻ります。RequestDispatcher呼び出して使用するServletContext.getRequestDispatcher(String)場合は、常に Web アプリケーション内で転送する必要があり、先頭のスラッシュが必要です (太字の鉱山):

パス名は a で始まる必要があり、現在のコンテキスト ルート/を基準として解釈されます。

したがって、転送する/page01.jspと次のように解釈され/your_context/page01.jspますyour_context。 は Web アプリケーションの名前です。

ただし、パスにリダイレクトを送信すると/error.jsp、サーブレット コンテナーは単にそのアドレスを 302 応答でブラウザーに送り返します。/error.jsp現在、ブラウザは次のように解釈します。現在のサーバーの絶対パスである にリダイレクトしてください。したがって、ブラウザが を指していたとしてもhttp://example.com/foo/bar/servlet、この応答は にリダイレクトされhttp://example.com/error.jspます。

ただし、単純error.jspにブラウザーにリダイレクトすると、動作が異なります。現在のディレクトリのファイルとして解釈します。にリダイレクトhttp://example.com/foo/bar/servletされhttp://example.com/foo/bar/error.jspます。そして、これがあなたが見るものです。

于 2013-01-12T10:02:51.507 に答える
1

「/」で始まる文字列をパスに渡すとHttpServletResponse#sendRedirect、パスはアプリケーションではなくサーバーに対して相対的になります。したがって、これを機能させるには、次のようなものを渡す必要があります。

response.sendRedirect("/myapp/error.jsp");

于 2013-01-12T09:54:34.253 に答える
0

名前を使用してファイルを呼び出す代わりに、 web.xml で定義された値を使用して呼び出すだけで、 web.xml でサーブレット マッピングを試してください。

于 2013-01-12T10:04:48.303 に答える
0

同じページで sendRedirect() と getRequestDispacher() を使用する際の注意事項

1) 同じページで sendRedirect() と getRequestDispacher("").include() を使用すると、常に url を呼び出している sendRedirect() の出力が UI に出力されます。

2) 1) 同じページで sendRedirect() と getRequestDispacher("").forward(req,res) を使用すると、「応答がコミットされた後に転送できません」という Excetion が発生します。

于 2015-07-09T11:07:54.203 に答える