- PR -

try catch で getServletContext().getRequestDispatcherができない

1
投稿者投稿内容
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 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が起きたことがログとして残っています。
何か間違った、または足りない処理があるのでしょうか?

ご助言、お願いします。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2008-02-06 12:49
forwardは、新たなリクエストは飛びません。
新たなリクエストを発生させたいなら、リダイレクトを行います。

ちなみに、どううまくいってないんですか?
500番が出るとかかな。出るとしたらどんなメッセージなんでしょう。
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 2008-02-06 12:57
早々のご回答ありがとうございます。

>forwardは、新たなリクエストは飛びません。
これはどういった意味でしょうか? 初心者ですみません。

>新たなリクエストを発生させたいなら、リダイレクトを行います。
遷移先のjspでrequest.getParameterでパラメータを取りたいと考えています。
ex)getRequestDispatcher("ファイル名?param="param)...
リダイレクトを使った場合、こういったことはできますか?

>ちなみに、どううまくいってないんですか?
画面としてはエラーはcatchで捕らえられている為、何も出力されていない状態です。

どうやって解析していってよいのか分からず、困っております。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-02-06 13:12
引用:

first-tryさんの書き込み (2008-02-06 11:58) より:
Catalina.outには、FileNotFoundExceptionが起きたことがログとして残っています。


Catalina のログの仕様は良くは知りませんが、catch していたらログには書かれないのではないでしょうか?すなわち、catch できていない FileNotFoundException が起こっているのではないでしょうか?

また、私だったら、デバッグ方法としては、まず、forward している行が本当に実行されているのかを System.out.println やその他ログに出したり、ブレークポイントを仕掛けたりして確認します。
もし本当に実行されているならば、こんどは try/catch していないところで仮に forward してみてそれはちゃんと動くのかどうかを調べてみます。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-02-06 13:42
引用:

>forwardは、新たなリクエストは飛びません。
これはどういった意味でしょうか? 初心者ですみません。


fowardは出力内容をjsp等に依頼するだけで、その時点でクライアントに戻るわけではない、ということですね。

引用:

>ちなみに、どううまくいってないんですか?
画面としてはエラーはcatchで捕らえられている為、何も出力されていない状態です。


そのtry〜catch内で発生したFileNotFoundExceptionではないということでは?
例えば、試してませんが、対象のjspがない場合ってどうなるんでしたっけ?
first-try
会議室デビュー日: 2008/01/22
投稿数: 14
投稿日時: 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();
}
------------------------------------------------------------------------------

皆様、ありがとうございました。
速攻のレスポンスに助けられました。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2008-02-07 08:50
もしかしてファイル名って
C:\test.txtみたいなフルパスとかですか?jpsとかservletではなくて

コード:
getServletContext().getRequestDispatcher("C:\test.txt").forward(req, res); 


みたいなのだとそもそも動かないです
1

スキルアップ/キャリアアップ(JOB@IT)