27

JSPではresponse.sendError(int code, String message)、特定のエラーコード(たとえば、見つからない場合は404)とメッセージを返すために使用できます。デフォルトの醜いTomcatエラーページを使用している限り、これらのメッセージは正常に表示されます。ただし、カスタムエラーページを作成する場合、どのようにしてそのメッセージを取得しますか?私は試したがexception.getMessage()役に立たpageContext.getErrorData()なかった。私はこれを何時間も探していましたが、誰も同じことを不思議に思っているようには見えません!:S

これまでは404でしか試していなかったので、それが最も必要なことです...何らかの理由で例外がnullであるため、何かを試した場合はNullPointerExceptionがスローされます。エラーページは404エラーページであり、web.xmlを介して設定され(すべての単一の404エラーに対して表示されるようにしたいため)、疑問に思っている人のために、はい、isErrorPageディレクティブがtrueに設定されています...

4

6 に答える 6

13

エラーメッセージはjavax.servlet.error.message、エラーページjspのリクエストオブジェクトの属性を介して利用できます。

アクセスするためのjsp構文は次のとおりです。

<c:out value="${requestScope['javax.servlet.error.message']}"/>

ここのエラーページの[新しいエラー属性]で、他のエラー関連情報を探すことができます。

于 2009-06-23T19:31:58.200 に答える
9

うーん、exception.getMessage()動作するはずです

追加してみるexception.getClass().getName()

  1. NullPointerExceptionメッセージのない である可能性があります
  2. または、例外が Sun からのものではなく、メッセージが正しく設定されていない

もちろん、これは、私の記憶が正しければ、一番上にある jsp によってエラーがスローされた場合にのみ機能します<%@ page errorPage="/yourerrorpage.jsp" %>

エラーがサーブレットから発生した場合、例外の詳細がリクエスト属性として渡されます

javax.servlet.error.status_code    java.lang.Integer
javax.servlet.error.exception_type java.lang.Class
javax.servlet.error.message        java.lang.String
javax.servlet.error.exception      java.lang.Throwable
javax.servlet.error.request_uri    java.lang.String
javax.servlet.error.servlet_name   java.lang.String

サーブレット仕様を確認してください(リンクは ~ 2011 以降で壊れています) セクション 9.9

于 2009-06-15T09:53:11.930 に答える
0

exception一部はErrorData、応答エラーコードではなく、例外の結果としてエラーページがロードされた場合にのみ設定されます。

については、 javadocを参照してsendErrorくださいHttpServletResponse。渡したメッセージが表示されない理由が記載されていますsendError(私の強調):

指定されたステータスを使用して、クライアントにエラー応答を送信します。サーバーはデフォルトで、指定されたメッセージを含むHTML形式のサーバーエラーページのように見える応答を作成し、コンテンツタイプを「text / html」に設定し、Cookieやその他のヘッダーを変更しないままにします。渡されたステータスコードに対応するWebアプリケーションに対してエラーページ宣言が行われた場合、提案されたmsgパラメータよりも優先して返されます。

応答がすでにコミットされている場合、このメソッドはIllegalStateExceptionをスローします。この方法を使用した後、応答はコミットされていると見なされ、書き込まれないようにする必要があります。

于 2009-06-22T18:15:33.763 に答える
0

使用できます

${requestScope['javax.servlet.error.message']}

ページに jstl がない場合

于 2016-12-25T06:20:00.747 に答える