2010-12-08 13 views
6

JSPタグを使用して(Tomcatで)JSPタグを使用してデータを取得しています。しかし、これらのJSPタグは例外をスローする可能性があります(たとえば、パラメータ値が無効な場合など)。今私は、これらの状況のた​​めのより良いエラー処理を実装したい。私はGLOBALLY例外ハンドラを指定する方法を見つけることができませんでした(web.xmlのエラーページ定義はJSPでスローされた例外に対して機能しません)。私がこれまでに見つけた唯一の方法は、すべてのJSPファイルのページヘッダーでerrorPage属性を指定することです。JSPエラーハンドラでHTTPステータスコードを設定するには

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %> 

すべてのJSPでこれを行うのは面倒ですが、問題ありません。しかし、受け入れられないのは、エラーページが常にHTTPステータスコード200で配信されるということです。私は代わりに500を使用します。私はサーブレットをJSPの代わりにerrorPageとして使用しようとしましたが、response.setStatus(500)とresponse.sendError(500)を設定しようとしましたが、両方の呼び出しが無視されるようです。したがって、このコードを印刷「200」2回と私は考えている理由:

System.out.println(response.getStatus()); 
response.setStatus(500); 
System.out.println(response.getStatus()); 

そこで質問です:私はJSPのエラーハンドラでHTTPステータスコードを設定できますか?

答えて

4

エラーページはweb.xmlに設定できます。あなたの500.jsp

<error-page> 
     <error-code> 
      500 
     </error-code> 
     <location> 
      /500.jsp 
     </location> 
    </error-page> 

は、あなたがより良いsendError(500)を使用したい、<%@ page isErrorPage="true" %>

+1

私が書きましたように、web.xmlのエラーページ定義はJSPでは機能しません。 web.xmlには、Servletでスローされた例外をキャッチするためのこれらの行がすでにありますが、そこではうまく動作しますが、私の問題はJSPではなくサーブレットでは例外処理です。 – kayahr

2

代わりのsetStatus(500)としてディレクティブを設定する - いくつかの違いがあります。 web.xmlの設定はsendErrorで正常に動作しますが、web.xmlに設定したくない場合は、ページの指示のerror-pageはHTTPエラーコードではなく私のためだけに機能します。

関連する問題