- - PR -
Exceptionについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-12-14 22:00
servletからのエラー発生時どこのクラス・メソッドでエラーが出たかを出力してみたのですが、必ず
CLASS:javax.servlet.http.HttpServlet METHOD:service LINE:853 FILE:HttpServlet.java になってしまいます。 servlet.doget内でDBに接続するクラス・メソッドを呼び出して、そこでエラーが発生しても 上のメッセージがでます。(そのメソッドはthrow Exceptionしています) なぜなんでしょう? StackTraceElement[] elements = pri_exception.getStackTrace() // エラーをtomcat側に出力 pri_exception.printStackTrace(); // ログ出力 TransLog.outMsg( " CLASS:" + elements[1].getClassName() + " METHOD:" + elements[1].getMethodName() + " LINE:" + elements[1].getLineNumber() + " FILE:" + elements[1].getFileName() ); |
|
投稿日時: 2004-12-14 23:33
例外をネストしているからではないでしょうか? Throwable#getCause()を試してみてください。 |
|
投稿日時: 2004-12-15 00:27
サーブレット内で RuntimeException(またはその子クラス)が発生するとコンテナが ServletException にラップして throw します。
Tomcat なんかは根本原因のスタックトレースを表示してくれないらしいです。getRootCause().printStackTrace() で根本原因を表示できるでしょう。 http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletException.html#getRootCause() #WebLogic 等の商用製品は自動的に根本原因を表示してくれます |
|
投稿日時: 2004-12-15 22:02
YOU@ITさん
インギさん アドバイス有難うございます。 私が未熟なため良く理解できなかったのですが @ doget{ }catch (Exception Exception ){ //↓Null Pointer Excepitonが発生 Exception.getCause().printStackTrace(); A catchのExceptionをServletExceptionに変えたところ IOExceptionエラーがキャッチできずコンパイルできませんでした。 お二方がおっしゃることとやっていることが違うのでしょうか? |
|
投稿日時: 2004-12-15 23:23
//doget{
↑これどういう構文でしょう?コンパイルできなさそうですが。 どういう場所で発生しているかちょっと説明ではわからないのですが、doGet 内で RuntimeException が発生しているのだと思います。 ServletExceptionの役割とかわからないのであればまず doGet 内で RuntimeException をキャッチしてスタックトレースを表示しましょう。 例外の概念とかがそもそも分からないのであればその手の参考書なりサイトをまず読みましょう。 |
|
投稿日時: 2004-12-16 21:13
インギさん>
doGetは以下のものです。割愛しすぎました。ごめんなさい。 Exceptionに関しては一通り学んだつもりですが、、、。 まだ勉強不足ですね。 public void doGet(HttpServletRequest request, HttpServletResponse response){ try{ --- }catch(Exception pri_Exception){ StackTraceElement[] elements = pri_exception.getStackTrace() // エラーをtomcat側に出力 pri_exception.printStackTrace(); // ログ出力 TransLog.outMsg( " CLASS:" + elements[1].getClassName() + " METHOD:" + elements[1].getMethodName() + " LINE:" + elements[1].getLineNumber() + " FILE:" + elements[1].getFileName() ); } |
|
投稿日時: 2004-12-16 21:53
で、そのスタックトレースはどうなっているんでしょう?
outMsg でごにょごにょ出力している内容より printStackTrace() の出力結果のほうがよっぽど雄弁です。 繰り返し(3度目)になりますが、Exception が ServletException なのであれば getRootCause().printStackTrace() してみましょう。 |
1