如何在web.xml中指定默认错误页面?


138

当用户遇到某些错误(例如,代码为404的错误)时,我正在使用web.xml中的<error-page>元素来指定友好错误页面:

<error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
</error-page>

但是,我希望如果用户不符合中指定的任何错误代码<error-page>,则他或她应该看到默认错误页面。我该如何使用web.xml中的元素呢?


2
您正在使用/定位哪个servlet容器,以及web.xml声明到哪个servlet版本?从Servlet 3.0开始,只有一种简单的方法。
BalusC

我正在使用Tomcat 6,Servlet 2.5
ipkiss,2011年

Answers:


240

在Servlet 3.0或更高版本上,您只需指定

<web-app ...>
    <error-page>
        <location>/general-error.html</location>
    </error-page>
</web-app>

但是,由于您仍在使用Servlet 2.5,因此别无选择,只能单独指定每个常见的HTTP错误。您需要确定最终用户可能遇到的HTTP错误。在使用HTTP身份验证,拥有禁用目录列表,使用自定义Servlet和代码(可能会引发未处理的异常或未实现所有方法的代码)的准系统Web应用程序上,您需要针对HTTP错误进行设置401 ,403、500和503。

<error-page>
    <!-- Missing login -->
    <error-code>401</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Missing resource -->
    <error-code>404</error-code>
    <location>/Error404.html</location>
</error-page>
<error-page>
    <!-- Uncaught exception -->
    <error-code>500</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Unsupported servlet method -->
    <error-code>503</error-code>
    <location>/general-error.html</location>
</error-page>

那应该涵盖最常见的那些。


您可以指定一个常规错误页面,然后用<error-code>标签覆盖某些错误代码吗?
Qix-蒙尼卡(Monica)

6
@Tomas:Tomcat的人和你有同样的问题。规范中没有在字面上提到这一点,只有规范中的图14-10和web.xmlXSD文件证明了这一点,<error-code>并且<exception-type>成为可选的,而不是必需的。参见问题52135
BalusC

java.sun.com/xml/ns/javaee/web-app_2_5.xsd没有为<error-page>元素指定<description>子元素,因此将上述代码原样粘贴到Servlet 2.5 web.xml中将导致XSD验证错误。但是,如果我发表评论,效果很好,谢谢!
拉斯洛·范登霍克

1
@BalusC:general-error.html页(在您的答案中提到)应该放在WEB-INF的什么位置?我对Servlet 2.5有一个奇怪的问题,其中针对HTTP错误403,我创建了一个<error-page>定义,并且error403.jsp页面位于WEB-INF中,因此,当有任何错误时,error403.jsp页面就会加载尝试访问其中的资源,但是未加载error403.jsp中的图像和CSS,从而使页面看起来放错了位置。
杰伊2014年

@Kaipa:只使用URL相对路径,而不是CSS / JS /图像资源的webcontent相对路径。许多入门者错误地认为这些资源是服务器端解析的,但实际上是客户端资源。另请参见stackoverflow.com/questions/3655316/...
BalusC

23

您还可以执行以下操作:

<error-page>
    <error-code>403</error-code>
    <location>/403.html</location>
</error-page>

<error-page>
    <location>/error.html</location>
</error-page>

对于错误代码403,它将返回页面403.html,对于任何其他错误代码,将返回页面error.html。


8

您也可以<error-page>使用来指定例外情况<exception-type>,例如:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/errorpages/exception.html</location>
</error-page>

或使用映射错误代码<error-code>

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.