アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
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()は例外を投げました
という文が出力されています。

A 回答 (3件)

>DOS画面に大量の文字がでます



 それがスタックトレースです。一番上の行が例外を発生したメソッドで、その次の行がそれを呼んだメソッド、その次の行が……という構造です。

 たいていはDOS窓のスクロールバーで一番上の行まで見えますが、だめなようですね。

 printStackTrace()は引数にストリームを取ることができるので、No.2のご回答を試してください。

 また、JSPの記述に問題がないことを再確認するために、dispatch先にJSPではなくHTMLファイルを指定してみてください。それで例外が出なくなればJSPの問題ということに。
    • good
    • 0
この回答へのお礼

やはりJSPの方に問題があったようです。
違うマシンで試してみたところそっちでは正常に動いたのでもう一度環境を一からインストールし直したら正常に動きました。ApacheやTomcatを何度かインストールし直していたので少しずつ設定がおかしくなっていたのかも。エラーコードを見ないとわからなかったと思います。
アドバイス本当にありがとうございました。

お礼日時:2002/07/12 13:53

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);
}

とかしておけば、ブラウザにエラーを出せますよ・・・(たぶん)。
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。
このメソッドはすごく役に立ちました。今後も使っていきたいと思います。

お礼日時:2002/07/12 13:56

 もし表示をJSPに移すのが目的であれば、include()ではなくforward()になりますが、それは大丈夫でしょうか。



 私はforward()しか使ったことがないのですが、include()は次の例のように「サーブレットの出力ストリームに割り込む」ようです。

http://java-house.jp/ml/archive/j-h-b/047496.html

 include()で良いとすれば、そこで起きている例外をもっと詳しく見てみましょう。try{}catch{}で囲んでprintStackTrace()してはどうでしょうか。

この回答への補足

forward()でも特に問題はないのですがそちらでやっても同じような状態になります。それと初歩的な質問で大変申し訳ないのですがprintStackTrace()したあとどうやってそれを確認するのでしょうか?私はTomcatを使っているのですが起動をかけた時にでるDOS画面に大量の文字がでますがあれを見るのでしょうか?もしそうなら画面に表示しきれない部分はどうやって見るのかも教えていただければうれしいです。

補足日時:2002/07/11 17:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!