- - PR -
try catch で getServletContext().getRequestDispatcherができない
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-06 11:58
お世話になります。
以下のソースを書いております。 Class Test extends HttpServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ........ try { 処理; } catch (FileNotFoundException ex) { getServletContext().getRequestDispatcher("ファイル名").forward(req, res);※1 } ---------------------------------------------------------------------------- FileNotFoundExceptionが起きたときに、※1の処理を行いたいのですが、 "ファイル名"にリクエストが飛びません。 Catalina.outには、FileNotFoundExceptionが起きたことがログとして残っています。 何か間違った、または足りない処理があるのでしょうか? ご助言、お願いします。 | ||||||||
|
投稿日時: 2008-02-06 12:49
forwardは、新たなリクエストは飛びません。
新たなリクエストを発生させたいなら、リダイレクトを行います。 ちなみに、どううまくいってないんですか? 500番が出るとかかな。出るとしたらどんなメッセージなんでしょう。 | ||||||||
|
投稿日時: 2008-02-06 12:57
早々のご回答ありがとうございます。
>forwardは、新たなリクエストは飛びません。 これはどういった意味でしょうか? 初心者ですみません。 >新たなリクエストを発生させたいなら、リダイレクトを行います。 遷移先のjspでrequest.getParameterでパラメータを取りたいと考えています。 ex)getRequestDispatcher("ファイル名?param="param)... リダイレクトを使った場合、こういったことはできますか? >ちなみに、どううまくいってないんですか? 画面としてはエラーはcatchで捕らえられている為、何も出力されていない状態です。 どうやって解析していってよいのか分からず、困っております。 | ||||||||
|
投稿日時: 2008-02-06 13:12
Catalina のログの仕様は良くは知りませんが、catch していたらログには書かれないのではないでしょうか?すなわち、catch できていない FileNotFoundException が起こっているのではないでしょうか? また、私だったら、デバッグ方法としては、まず、forward している行が本当に実行されているのかを System.out.println やその他ログに出したり、ブレークポイントを仕掛けたりして確認します。 もし本当に実行されているならば、こんどは try/catch していないところで仮に forward してみてそれはちゃんと動くのかどうかを調べてみます。 | ||||||||
|
投稿日時: 2008-02-06 13:42
fowardは出力内容をjsp等に依頼するだけで、その時点でクライアントに戻るわけではない、ということですね。
そのtry〜catch内で発生したFileNotFoundExceptionではないということでは? 例えば、試してませんが、対象のjspがない場合ってどうなるんでしたっけ? | ||||||||
|
投稿日時: 2008-02-06 14:54
unibonさん
デバッグ方法ありがとうございました。 getServletContext().getRequestDispatcher("ファイル名").forward(req, res); では実行されず、 ------------------------------------------------------------------------------ RequestDispatcher rd = getServletContext().getRequestDispatcher("/nofile.jsp"); rd.forward(req, res); ------------------------------------------------------------------------------ と書き直しました。 mioさん >そのtry〜catch内で発生したFileNotFoundExceptionではないということでは? 私も同じことを考えました。 そして以下の処理をtry内に記述することで解決しました。 (文字化けという別の問題は残りましたが・・・) ------------------------------------------------------------------------------ if (!ファイル名.exists()) { throw new FileNotFoundException(); } ------------------------------------------------------------------------------ 皆様、ありがとうございました。 速攻のレスポンスに助けられました。 | ||||||||
|
投稿日時: 2008-02-07 08:50
もしかしてファイル名って
C:\test.txtみたいなフルパスとかですか?jpsとかservletではなくて
みたいなのだとそもそも動かないです |
1