- - PR -
JspExceptionのハンドリング
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-06-16 18:18
Strutsを使用してWebアプリケーションを開発しています。
JSPの部品として、独自にカスタムタグを作成していますが、 doStartTag等、JSP表示時に実行されるプログラムでExceptionが発生した場合、 JSPが途中で途切れたまま表示されています。 これを防ぐため 発生したExceptionをどこかでハンドリングして 指定のエラーページに遷移するようにしたいのですが そのようなことができるのでしょうか? またできる場合、どのようにしたら良いのでしょうか。 ご存知の方がいらっしゃいましたら、アドバイスをお願いいたします。 コード例) public int doStartTag() throws JspException { try { // Hello Worldと出力 pageContext.getOut().print("Hello World"); } catch (Exception e) { throw new JspException(e.getMessage());←このExceptionをハンドリングしたい } return SKIP_BODY; } |
|
投稿日時: 2008-06-16 18:46
原理的にちょっと無理なのでは。
JSPの途中で例外が起きた、ブラウザに途中まで表示されている、という状態と言うのは、ブラウザのHTTPリクエストに対して、すでにHTTPレスポンスが途中まで送出されてしまっているということを意味します。 そして、500 Internal Server Errorといった状態を表すHTTPステータスコードは、HTTPレスポンスヘッダの部分に含まれ、このヘッダはHTTPレスポンスボディ(つまるところJSPが送り出しているHTMLの部分)より手前で送り出されます。 つまり、HTTPのレスポンスコードによってエラーであるとか、リダイレクトせよというためには、JSPの処理が行われる前で決定しないといけないわけです。一度本文を送信し始めると、ブラウザはその本文を表示し始めてしまう。キャンセルを行うことはできません。 では、通常Servletの開発時に例外が起こるとエラーページが表示されるのはなぜか?それは、まだブラウザに対して本文のデータを送出していないタイミングでエラーページへと差し替えを行うからです。 JSPはブラウザへのデータ出力の際に即座にデータを送り出さず、ある程度バッファするようになっています。このバッファの範囲内の場合、ブラウザへの送出をキャンセルして、エラーページを表示します。一度送出されるとキャンセルはできません。 |
|
投稿日時: 2008-06-17 15:58
nagiseさん 丁寧なご回答ありがとうございます。
やはり無理なのですね。 今回はこのようなエラーが発生した場合、エラーログが出力され、 そのエラーログがログ監視に引っかかって困る、といったことの回避策として考えていたためログ監視の定義のほうを変更して対応したいと思います。 ありがとうございました。 [ メッセージ編集済み 編集者: KG 編集日時 2008-06-17 15:58 ] |
1