2011-05-24 66 views
6

我知道你可以在web.xml中指定错误页面,如下一个通用的机制来处理HTTP状态代码

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

我觉得有点乏味,列出一个页面的每一个错误代码。我想知道在这种情况下最好的惯例是什么!有没有更好的方法来自动生成这些页面,例如使用JSP或servlet,还是通过Spring或Stripes?

回答

0

Stripes提供了一些可扩展但简单的方法来处理异常。有一个很好的写作on the stripes website和关于它的Stripes book几页。

您将基本上实现ExceptionHandler接口,从DefaultExceptionHandler扩展(我们通常所做的),或者有更高级的情况下有DelegatingExceptionHandler。

+0

这只包含HTTP 500错误。其他5nn和所有4nn错误不是由例外本身引起的。 – BalusC 2011-05-25 14:27:38

+0

我认为这是相关的,因为OP询问了除404以外的错误代码。事实上,这将覆盖大部分404,因为Stripes拦截器尝试绑定大多数URL并在动作bean,jsp或静态资源不是它时抛出它自己的404找到。 – lucas 2011-05-25 15:39:26

2

如果您正在讨论生成页面本身,您可以将错误代码映射到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。

+0

要访问响应的状态码,我会使用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

+0

@eneveu,没错 – Asaf 2011-08-20 08:56:48