- ベストアンサー
サーブレットからJSPの呼び出しについて
こんにちは。 JSPの呼び出しについて質問です。 サーブレットで RequestDispatcher dispatcher = req.getRequestDispatcher("/jsp/java.jsp"); dispatcher.include(req, res); としてJSPファイルを呼び出そうとしているのですが、うまくいきません。コンパイルは通ります。 dispatcher.include(req, res); の部分で例外処理にいってるのでそこがおかしいようですが。urlの指定もjspファイルの内容も何度も確認したのですがミスはないみたいで原因がわかりません。 またTomcatのログファイルlocalhost_logを見ると 2002-07-11 16:05:35 ApplicationDispatcher[/DB] サーブレット jsp のServlet.service()は例外を投げました という文が出力されています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>DOS画面に大量の文字がでます それがスタックトレースです。一番上の行が例外を発生したメソッドで、その次の行がそれを呼んだメソッド、その次の行が……という構造です。 たいていはDOS窓のスクロールバーで一番上の行まで見えますが、だめなようですね。 printStackTrace()は引数にストリームを取ることができるので、No.2のご回答を試してください。 また、JSPの記述に問題がないことを再確認するために、dispatch先にJSPではなくHTMLファイルを指定してみてください。それで例外が出なくなればJSPの問題ということに。
その他の回答 (2)
- m_hagizo
- ベストアンサー率65% (31/47)
JSPのコンパイルエラーということは考えられませんか? もう少し問題を詳しく分析するために、サーブレットにこんなメソッドを入れて確認してみてはいかがでしょうか。 private void writeError(HttpServletResponse res, Exception e) { PrintWriter writer = null; try { writer = res.getWriter(); } catch (Exception ex) { writer = new PrintWriter(System.out); } writer.println("<h4>例外が発生しました</h4>"); writer.println("<hr>"); if (e != null) { writer.println("<pre>"); writer.println(e.getClass() + ":" + e.getMessage()); e.printStackTrace(writer); writer.println("</pre>"); } } このメソッドを追加しておいて、 try { dispatcher.include(req, res); } catch(Exception e) { writeError(response, e); } とかしておけば、ブラウザにエラーを出せますよ・・・(たぶん)。
お礼
アドバイスありがとうございます。 このメソッドはすごく役に立ちました。今後も使っていきたいと思います。
もし表示をJSPに移すのが目的であれば、include()ではなくforward()になりますが、それは大丈夫でしょうか。 私はforward()しか使ったことがないのですが、include()は次の例のように「サーブレットの出力ストリームに割り込む」ようです。 http://java-house.jp/ml/archive/j-h-b/047496.html include()で良いとすれば、そこで起きている例外をもっと詳しく見てみましょう。try{}catch{}で囲んでprintStackTrace()してはどうでしょうか。
補足
forward()でも特に問題はないのですがそちらでやっても同じような状態になります。それと初歩的な質問で大変申し訳ないのですがprintStackTrace()したあとどうやってそれを確認するのでしょうか?私はTomcatを使っているのですが起動をかけた時にでるDOS画面に大量の文字がでますがあれを見るのでしょうか?もしそうなら画面に表示しきれない部分はどうやって見るのかも教えていただければうれしいです。
お礼
やはりJSPの方に問題があったようです。 違うマシンで試してみたところそっちでは正常に動いたのでもう一度環境を一からインストールし直したら正常に動きました。ApacheやTomcatを何度かインストールし直していたので少しずつ設定がおかしくなっていたのかも。エラーコードを見ないとわからなかったと思います。 アドバイス本当にありがとうございました。