我知道你可以在web.xml中指定错误页面,如下一个通用的机制来处理HTTP状态代码
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
我觉得有点乏味,列出一个页面的每一个错误代码。我想知道在这种情况下最好的惯例是什么!有没有更好的方法来自动生成这些页面,例如使用JSP或servlet,还是通过Spring或Stripes?
我知道你可以在web.xml中指定错误页面,如下一个通用的机制来处理HTTP状态代码
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
我觉得有点乏味,列出一个页面的每一个错误代码。我想知道在这种情况下最好的惯例是什么!有没有更好的方法来自动生成这些页面,例如使用JSP或servlet,还是通过Spring或Stripes?
Stripes提供了一些可扩展但简单的方法来处理异常。有一个很好的写作on the stripes website和关于它的Stripes book几页。
您将基本上实现ExceptionHandler接口,从DefaultExceptionHandler扩展(我们通常所做的),或者有更高级的情况下有DelegatingExceptionHandler。
如果您正在讨论生成页面本身,您可以将错误代码映射到jsp页面,例如,
<error-page>
<error-code>404</error-code>
<location>/errors.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errors.jsp</location>
</error-page>
如果你在谈论的映射本身,一个可能的解决方案(虽然我建议你使用标准的web.xml映射),以避免所有错误代码的映射是使用一个servlet过滤器过滤所有资源,委派对FilterChain的访问并检查响应代码集(如果它不是200)(或任何其他预定义的可接受响应(如401)),并重定向到errors.jsp页面。
为了捕获响应代码,您将使用保存响应代码集的HttpServletResponseWrapper实现来包装HttpServletResponse。
要访问响应的状态码,我会使用http://stackoverflow.com/questions/1302072/how-can-i-get-the-http-status-code-out-of-a-servletresponse-in- a-servletfilter(这是你的建议,但是有一个详细的实现)。 – 2011-08-17 09:40:53
@eneveu,没错 – Asaf 2011-08-20 08:56:48
这只包含HTTP 500错误。其他5nn和所有4nn错误不是由例外本身引起的。 – BalusC 2011-05-25 14:27:38
我认为这是相关的,因为OP询问了除404以外的错误代码。事实上,这将覆盖大部分404,因为Stripes拦截器尝试绑定大多数URL并在动作bean,jsp或静态资源不是它时抛出它自己的404找到。 – lucas 2011-05-25 15:39:26