如何在 web.xml 中指定默认错误页面?
Posted
技术标签:
【中文标题】如何在 web.xml 中指定默认错误页面?【英文标题】:How to specify the default error page in web.xml? 【发布时间】:2011-10-27 07:53:07 【问题描述】:我在 web.xml 中使用<error-page>
元素来指定当用户遇到特定错误(例如代码为 404 的错误)时的友好错误页面:
<error-page>
<error-code>404</error-code>
<location>/Error404.html</location>
</error-page>
但是,我希望如果用户没有遇到<error-page>
中指定的任何错误代码,他或她应该会看到默认错误页面。如何使用 web.xml 中的元素来做到这一点?
【问题讨论】:
您正在使用/定位什么 servlet 容器以及您的web.xml
声明的 servlet 版本是什么?只有从 Servlet 3.0 开始才有一种简单的方法。
我使用的是 Tomcat 6,servlet 2.5
【参考方案1】:
在 Servlet 3.0 或更高版本上,您只需指定
<web-app ...>
<error-page>
<location>/general-error.html</location>
</error-page>
</web-app>
但由于您仍在使用 Servlet 2.5,除了单独指定每个常见的 HTTP 错误之外别无他法。您需要弄清楚最终用户可能面临哪些 HTTP 错误。在准系统 web 应用程序上,例如使用 HTTP 身份验证、禁用目录列表、使用自定义 servlet 和可能引发未处理异常或未实现所有方法的代码,然后您希望将其设置为 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>
标签覆盖某些错误代码吗?
@Tomas:Tomcat 的家伙和你有同样的问题。这在规范中没有字面提及,只有规范中的图 14-10 和 web.xml
XSD 文件证明 <error-code>
和 <exception-type>
成为可选而不是必需的。见issue 52135。
java.sun.com/xml/ns/javaee/web-app_2_5.xsd 没有为 你也可以这样做:
<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。
【讨论】:
【参考方案3】:您还可以使用<exception-type>
为异常指定<error-page>
,例如:
<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>
【讨论】:
以上是关于如何在 web.xml 中指定默认错误页面?的主要内容,如果未能解决你的问题,请参考以下文章
servlet 过滤器是不是必须在 web.xml 文件中指定?
如何重写此 MySQL 查询,使其不会引发此错误:您无法在 FROM 子句中指定目标表 'crawlLog' 进行更新?