2012-07-25 3 views
6

これは十分に簡単だったはずです。私は500のための私自身のエラーページを表示するために、プロジェクトのweb.xmlを修正:Tomcat:カスタムエラーページが機能しない

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

その後、私はそれをテストするために、最も簡単なサーブレットを書いた:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
} 

のカスタムページ(ありますルートディレクトリにある)は完全に無視され、代わりにデフォルトのTomcatエラーページが表示されます。

私は、MyEclipseのデバッガに付属のTomcat 6バージョンを使用しています。私はこれを3倍にチェックしたが、これはタイプミスのためにチェックされたが、私は珍しいものを見つけることはできない。私はエラーページタグがドキュメントの特定の部分にある必要があるかどうか疑問に思っています。誰が間違っている可能性があるか知っていますか?

*編集:あなたのweb.xmlにはどのようなものに見えるん

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 

    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<display-name></display-name> 

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>/js/base.js</url-pattern> 
     <url-pattern>/js/catalog.base.js</url-pattern> 
     <url-pattern>/js/minicatalog.base.js</url-pattern> 
     <url-pattern>/js/addresses.js</url-pattern> 
    </jsp-property-group> 
</jsp-config> 

<mime-mapping> 
    <extension>pdf</extension> 
    <mime-type>application/pdf</mime-type> 
</mime-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/applicationContext.xml</param-value> 
</context-param> 

<!-- error-page> 
    <error-code>403</error-code> 
    <location>/index.jsp?redirect=1</location> 
</error-page--> 

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

<!-- BASE --> 
<servlet> 
    <description>User entity methods.</description> 
    <display-name>User</display-name> 
    <servlet-name>UserServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.UserServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>UserServlet</servlet-name> 
    <url-pattern>/servlet/UserServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Person entity methods.</description> 
    <display-name>Person</display-name> 
    <servlet-name>PersonServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.PersonServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>PersonServlet</servlet-name> 
    <url-pattern>/servlet/PersonServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Company entity methods.</description> 
    <display-name>Company</display-name> 
    <servlet-name>CompanyServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.CompanyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CompanyServlet</servlet-name> 
    <url-pattern>/servlet/CompanyServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Module entity methods.</description> 
    <display-name>Module</display-name> 
    <servlet-name>ModuleServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.ModuleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ModuleServlet</servlet-name> 
    <url-pattern>/servlet/ModuleServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Profile entity methods.</description> 
    <display-name>Profile</display-name> 
    <servlet-name>ProfileServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.ProfileServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ProfileServlet</servlet-name> 
    <url-pattern>/servlet/ProfileServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Address entity methods.</description> 
    <display-name>Address</display-name> 
    <servlet-name>AddressServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.AddressServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddressServlet</servlet-name> 
    <url-pattern>/servlet/AddressServlet</url-pattern> 
</servlet-mapping> 
<!-- END BASE --> 

<!-- PUSH --> 
<servlet> 
    <servlet-name>icepush</servlet-name> 
    <servlet-class>org.icepush.servlet.ICEpushServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>icepush</servlet-name> 
    <url-pattern>*.icepush</url-pattern> 
</servlet-mapping> 
<!-- END PUSH --> 

<!-- TRUCKS --> 
<servlet> 
    <description>Employee entity methods.</description> 
    <display-name>Employee</display-name> 
    <servlet-name>EmployeeServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.EmployeeServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>EmployeeServlet</servlet-name> 
    <url-pattern>/servlet/EmployeeServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Vehicle entity methods.</description> 
    <display-name>Vehicle</display-name> 
    <servlet-name>VehicleServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.VehicleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>VehicleServlet</servlet-name> 
    <url-pattern>/servlet/VehicleServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>VehicleBrand entity methods.</description> 
    <display-name>VehicleBrand</display-name> 
    <servlet-name>VehicleBrandServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.VehicleBrandServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>VehicleBrandServlet</servlet-name> 
    <url-pattern>/servlet/VehicleBrandServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Report methods.</description> 
    <display-name>Report</display-name> 
    <servlet-name>ReportServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.ReportServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ReportServlet</servlet-name> 
    <url-pattern>/servlet/ReportServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>ExpenseLog methods.</description> 
    <display-name>ExpenseLog</display-name> 
    <servlet-name>ExpenseLogServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.ExpenseLogServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ExpenseLogServlet</servlet-name> 
    <url-pattern>/servlet/ExpenseLogServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>IncomeLog methods.</description> 
    <display-name>IncomeLog</display-name> 
    <servlet-name>IncomeLogServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.IncomeLogServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>IncomeLogServlet</servlet-name> 
    <url-pattern>/servlet/IncomeLogServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>FileExport methods.</description> 
    <display-name>FileExport</display-name> 
    <servlet-name>FileExportServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.FileExportServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>FileExportServlet</servlet-name> 
    <url-pattern>/servlet/FileExportServlet</url-pattern> 
</servlet-mapping> 
<!-- END TRUCKS --> 

<session-config> 
    <session-timeout>15</session-timeout> 
</session-config> 

<!--security-constraint> 
    <web-resource-collection> 
     <web-resource-name>LOGIN</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint--> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

+1

**私はデフォルトのTomcatエラーページを取得しますか?** => 404ページですか? – mabbas

+0

いいえ、「エラーページが見つかりませんでした」とは404ではありません。web.xml – JayPea

+0

を変更する前に表示された通常の500ページで、 'error.jsp'というページは' webapp'フォルダの直下にあります? – mabbas

答えて

2
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

は、httpステータス500の応答を送信します。これは内部エラーを示していますが、アプリケーションでは発生しません。

ではなく

throw new ServletException(); 

を試してみて、あなたが期待どおりに設定が機能して表示されます。サーブレットで

+0

ありがとう!それは、私はそれが非常に単純な何かでなければならないことを知っていました。CSSと画像なしで表示されているため、現在のURLからページが開かれているようですが、絶対パスを使用すると思います。 – JayPea

0

: これは、要求された完全なweb.xmlのでしょうか?特にサーブレット/フィルタマッピング?サーブレット/フィルタマッピングに<dispatcher>ERROR</dispatcher>を追加する必要があるかもしれません。

+0

ありがとう、私はそれを試してみましょう。上記の完全なweb.xmlを追加しました。 – JayPea

+0

フィルタを正しく使用していない場合、これは当てはまりませんか? – JayPea

+0

フィルタを追加して、手動でエラーページにリダイレクトできるかどうかを確認しましたが、* ERROR *も無視されます。 * REQUESTを使用している場合*フィルタを実行することができます。そうしないと、ブレークポイントは決してヒットしません。それはあなたが調査するほど意味がないこれらのエラーの1つです。 – JayPea

15

、あなたが呼び出す必要があります:

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

の代わりに:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

エラー(例えば、 用がないときのsetStatusがリターンステータスコードを設定するために使用されますステータスコードSC_OKまたはSC_MOVED_TEMPORARILY)。エラーが発生した場合は、代わりにsendErrorメソッドを使用する必要があります。

+4

これは正しい答えです。 –

+2

はい、これは正解です。 –

関連する問題