こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

なぜ、独自のエラーページに飛んでくれないのか原因が分からず投稿させていただきました。
どなたかアドバイスお願いします。

投稿日時 - 2008-02-18 15:29:29

QNo.3787224

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

<error-page>要素を書く位置が間違っているとか。
<tag-lib>要素の前、<welcome-file-list>要素の次に書かないと設定に反映されません。
この場合は起動ログにしっかりエラーが記録されているはずです。

いずれにしてもケアレスミスの可能性が高いと思われます。
TOMCAT_HOME/conf/web.xml にも<error-page>を記述してみては?

投稿日時 - 2008-02-19 11:45:59

補足

web.xmlの要素位置(<error-code>)を直したら、
Tomcatデフォルトのエラーページはでなくなりました。
代わりに、
「ページを表示できません HTTP500 内部サーバエラー」
となってしまうようになりました。

指定しているエラーJSPのファイル自体が悪いのかと思い、
簡単なHTMLファイルに置き換えて表示させてみましたが、結果は
同じでした。

投稿日時 - 2008-02-19 13:06:41

ANo.7

> <error-type>
これはないでしょう。

投稿日時 - 2008-02-18 20:19:25

補足

すみません、タイプミスです。
web.xml内では、きちんと
<exception-type>と書いていました。

投稿日時 - 2008-02-19 09:14:17

ANo.6

500問題とはあまり関係のない事ですが・・
web.xmlのスキーマ(http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd)見ると、error-page要素の子要素はerror-codeかexception-typeのみのようですね。

投稿日時 - 2008-02-18 19:40:29

ANo.5

なんだかもう原因特定できないような気がしてきました・・。

first-tryさんは、JSP以外に、Servletは使われてますか?
というのも、Servletを使うには、サーブレットの登録とマップをweb.xmlで行わなければいけませんよね。
もしも使えなかったら、web.xmlで正しくマッピングできていないと考えることができて、原因はそこにあると考えられます。
(もうweb.xmlが反映されてないことを疑うしかない。。)

ちなみに、web.xmlがドキュメントベースになくても、こちらの環境では問題なくコンテナは立ち上がりますので、コンテナが起動しているからweb.xmlが正しく認識されているとは限らないと思います。

・・・いろいろと低質な回答をぐだぐだと書いてしまいましたが、今回のチェックポイントでだめならば、私の力では本当にお手上げです。

投稿日時 - 2008-02-18 19:33:39

ANo.4

もしかしたら!
web.xmlの設定がまるで反映されてないんじゃ・・。

web.xmlファイルはきちんと
ドキュメントベース/WEB-INF/web.xml
にありますか?
WEB_INFとかの名前になったりしていませんか?

投稿日時 - 2008-02-18 18:36:17

補足

はい、きちんと/WEB-INF/web.xmlになっています。
何より、サーブレットはきちんと動いています。

投稿日時 - 2008-02-18 19:00:10

ANo.3

すみません、どうやらこちらで勝手に原因を思い込んでいたみたいです(自分がサイズの問題を経験したせいです)。

ここからはアドバイス程度しかできませんが、
1, web.xmlを変更してからコンテナを再起動したか
2, 普通にそのページにアクセスして、きちんと表示されるか
例えば、http://localhoost:8080/jsptestがコンテキストルートだとすると、http://localhost:8080/jsptest/jsp/error.jspに普通にアクセスして、きちんと表示されるかどうかです。
3, エラーログにエラーが出力されていないか

これらを確認するくらいですね。。
勝手な想像ですが、2番が怪しいかなと思っています。

投稿日時 - 2008-02-18 18:07:20

補足

いつもいつも素早い回答ありがとうございます。

>1, web.xmlを変更してからコンテナを再起動したか
はい、再起動しています。

>2, 普通にそのページにアクセスして、きちんと表示されるか
はい、きちんと表示されます。
ちなみに中身は、
<%= exception.toString() %>
<%= exception.getMessage() %>
のみです。

>3, エラーログにエラーが出力されていないか
エラーログとは、catalina.outのことでしょうか?
私が設定したエラー以外は吐き出されないのですが・・・

投稿日時 - 2008-02-18 18:31:44

ANo.2

>生成されるページが何byteか、とはどうやったらわかるのでしょうか?
サイズが小さすぎると表示されないのはInternet Explorerのみなので、まずはFireFoxやその他のIE以外のブラウザでうまくいくかどうか試します。

サイズが小さすぎると表示されない問題は、
404でも500でも、すべてについてInternet Explorerでのみ発生します。
なので、500 Server Errorの問題が解決すれば、404も解決すると思います。

投稿日時 - 2008-02-18 17:08:14

補足

早々のご返答ありがとうございます。

FireFoxで試してみましたが、結果はIEと同じでした。

このことからわかることはありますでしょうか?
何かあれば、アドバイスお願いします。

投稿日時 - 2008-02-18 17:51:31

ANo.1

/jsp/error.jspファイルが生成するページにデータは、600byte以上ありますか?

それ以下(5百と数十バイト)だと、正常にページが表示されません。

投稿日時 - 2008-02-18 16:18:53

補足

アドバイスありがとうございます。

無知なためもうひとつ教えてください。
生成されるページが何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エラーページが表示されてしまいます。
こちらもアドバイスありましたら、お願いします。

投稿日時 - 2008-02-18 16:44:05

あなたにオススメの質問