- 締切済み
web.xmlでのエラーページ
お世話になります。 Tomcat5.5、Linux環境下で、 WEB-INF/web.xmlに <error-page> <error-code>500</error-code> <location>/jsp/error.jsp</location> </error-page> <error-page> <error-type>java.lang.Exception</error-type> <location>/jsp/error.jsp</location> </error-page> という記述をしています。 (Tomcatは問題なく起動しています) サーブレット内でエラーが起こるように設定したのですが、作成したerror.jspに飛ばず、通常の500のエラーページが表示されます。 サーブレット記述 doGet(... ) throws ServletException,IOException { ...処理 try { throw new IOException(); //ここでExceptionをわざと起こしています。 ...処理 } catch (Exception e) { e.printStackTrace(); throw new ServletException(e); } なぜ、独自のエラーページに飛んでくれないのか原因が分からず投稿させていただきました。 どなたかアドバイスお願いします。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- bgbg
- ベストアンサー率53% (94/175)
<error-page>要素を書く位置が間違っているとか。 <tag-lib>要素の前、<welcome-file-list>要素の次に書かないと設定に反映されません。 この場合は起動ログにしっかりエラーが記録されているはずです。 いずれにしてもケアレスミスの可能性が高いと思われます。 TOMCAT_HOME/conf/web.xml にも<error-page>を記述してみては?
- _ranco_
- ベストアンサー率58% (126/214)
> <error-type> これはないでしょう。
補足
すみません、タイプミスです。 web.xml内では、きちんと <exception-type>と書いていました。
- ggaogg
- ベストアンサー率43% (38/88)
500問題とはあまり関係のない事ですが・・ web.xmlのスキーマ(http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd)見ると、error-page要素の子要素はerror-codeかexception-typeのみのようですね。
- ggaogg
- ベストアンサー率43% (38/88)
なんだかもう原因特定できないような気がしてきました・・。 first-tryさんは、JSP以外に、Servletは使われてますか? というのも、Servletを使うには、サーブレットの登録とマップをweb.xmlで行わなければいけませんよね。 もしも使えなかったら、web.xmlで正しくマッピングできていないと考えることができて、原因はそこにあると考えられます。 (もうweb.xmlが反映されてないことを疑うしかない。。) ちなみに、web.xmlがドキュメントベースになくても、こちらの環境では問題なくコンテナは立ち上がりますので、コンテナが起動しているからweb.xmlが正しく認識されているとは限らないと思います。 ・・・いろいろと低質な回答をぐだぐだと書いてしまいましたが、今回のチェックポイントでだめならば、私の力では本当にお手上げです。
- ggaogg
- ベストアンサー率43% (38/88)
もしかしたら! web.xmlの設定がまるで反映されてないんじゃ・・。 web.xmlファイルはきちんと ドキュメントベース/WEB-INF/web.xml にありますか? WEB_INFとかの名前になったりしていませんか?
補足
はい、きちんと/WEB-INF/web.xmlになっています。 何より、サーブレットはきちんと動いています。
- ggaogg
- ベストアンサー率43% (38/88)
すみません、どうやらこちらで勝手に原因を思い込んでいたみたいです(自分がサイズの問題を経験したせいです)。 ここからはアドバイス程度しかできませんが、 1, web.xmlを変更してからコンテナを再起動したか 2, 普通にそのページにアクセスして、きちんと表示されるか 例えば、http://localhoost:8080/jsptestがコンテキストルートだとすると、http://localhost:8080/jsptest/jsp/error.jspに普通にアクセスして、きちんと表示されるかどうかです。 3, エラーログにエラーが出力されていないか これらを確認するくらいですね。。 勝手な想像ですが、2番が怪しいかなと思っています。
補足
いつもいつも素早い回答ありがとうございます。 >1, web.xmlを変更してからコンテナを再起動したか はい、再起動しています。 >2, 普通にそのページにアクセスして、きちんと表示されるか はい、きちんと表示されます。 ちなみに中身は、 <%= exception.toString() %> <%= exception.getMessage() %> のみです。 >3, エラーログにエラーが出力されていないか エラーログとは、catalina.outのことでしょうか? 私が設定したエラー以外は吐き出されないのですが・・・
- ggaogg
- ベストアンサー率43% (38/88)
>生成されるページが何byteか、とはどうやったらわかるのでしょうか? サイズが小さすぎると表示されないのはInternet Explorerのみなので、まずはFireFoxやその他のIE以外のブラウザでうまくいくかどうか試します。 サイズが小さすぎると表示されない問題は、 404でも500でも、すべてについてInternet Explorerでのみ発生します。 なので、500 Server Errorの問題が解決すれば、404も解決すると思います。
補足
早々のご返答ありがとうございます。 FireFoxで試してみましたが、結果はIEと同じでした。 このことからわかることはありますでしょうか? 何かあれば、アドバイスお願いします。
- ggaogg
- ベストアンサー率43% (38/88)
/jsp/error.jspファイルが生成するページにデータは、600byte以上ありますか? それ以下(5百と数十バイト)だと、正常にページが表示されません。
補足
アドバイスありがとうございます。 無知なためもうひとつ教えてください。 生成されるページが何byteか、とはどうやったらわかるのでしょうか? error.jspの中身は、 <%= exception.toString() %> <%= exception.getMessage() %> なので、エラーごと、生成されるbyte数は違うと思います。 また、WEB-INF/web.xmlに <error-page> <error-code>404</error-code> <location>/jsp/error.jsp</location> </error-page> といった記述を追加してみました。 そして存在しないファイル名をURLに打ったのですが、 通常の404エラーページが表示されてしまいます。 こちらもアドバイスありましたら、お願いします。
補足
web.xmlの要素位置(<error-code>)を直したら、 Tomcatデフォルトのエラーページはでなくなりました。 代わりに、 「ページを表示できません HTTP500 内部サーバエラー」 となってしまうようになりました。 指定しているエラーJSPのファイル自体が悪いのかと思い、 簡単なHTMLファイルに置き換えて表示させてみましたが、結果は 同じでした。