web.xmlのerror-pageがちゃんと表示されない?
月曜日のこと
前々から気になっていたけど、調べるのをサボっていたことを調査してみた。
それは、『web.xmlで指定しているerror-pageが画面に表示されない。』という件。
別のプロジェクトでは出来ていたはずなんだけど、今のプロジェクトでは、ブラウザにerror-pageで指定した画面が表示されない。
とりあえず、現状以下のように設定している。
〜省略〜 <error-page> <error-code>500</error-code> <location>/view/FatalError.jsp</location> </error-page> 〜省略〜
設定自体に間違いはないと思う。
とりあえず、最初にJSPの実行のタイミングによって、表示されたりされなかったりするんじゃないか。
と考え実験してみた。
以下のパターンで実験してみることに。
そんで、実験したみた結果。*1
errorPageを指定したJSP実行中にエラーのときのみ、エラー画面がちゃんと表示された。
他のケースでは表示されない。
なんか納得いかないので、レスポンスの中身を覗いてみる。
すると、errorPageを指定したJSP実行中にエラー以外のケースでもレスポンスボディにちゃんとエラー画面のHTMLが入っている。
何故、表示されないのだろう?
違いといえば、errorPageを指定したJSP実行中にエラーのときは、ステータスコードが200でそれ以外は500だってこと。
分からないので適当にググッてみたら、
http://members.jcom.home.ne.jp/newtype-shira/home/java/tomcaterror.html
に
ステートが"200"から"400"、"500"番台に変わったことからIEではエラーページが表示されなくなる現象が起きます。これはIEの設定(使用)がそうなっているからです。
と、さらに、
そこでIEの性質上、
256(512)バイト以上のエラーページは"HTTP エラーメッセージを簡易表示する"設定であっても表示される
事を利用し、自分で作成したエラーページを256(512)バイト以上にします
とあった。
早速、error-pageとして使用しているHTMLに半角スペースを500バイト追加してみる。
成功。
どのケースでもエラーページが表示されるようになった。
けど、これってIEだけなんだろうなぁ。。
他のブラウザ入ってないから今試すのはめんどくさい。
あと、携帯端末だとどうなるんだろう。
少なくとも、手元にある携帯エミュレータでは表示できない。*2
もし、携帯端末が、ステータスコード200以外の画面を表示できないということであれば、どうしたらいいだろう?
あと、どのステータスコードを返すかって、APサーバ別に実装が違うみたい。
これも、使うAPサーバによって調査が必要かもしれない。
とりあえず、
ってことは分かった。
*1:環境は、JDK1.4.2_04、Tomcat5.0.24
*2:J-Skey Viewer http://www.dp.j-phone.com/dp/tool_dl/web/tool.php