【问题标题】:A generic mechanism to deal with HTTP status codes处理 HTTP 状态码的通用机制
【发布时间】:2011-09-01 08:14:21
【问题描述】:

我知道您可以在 web.xml 中指定错误页面,如下所示

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

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

【问题讨论】:

    标签: java servlets http-status-codes


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    Stripe 提供了一些可扩展但简单的异常处理方法。 on the stripes website 有一篇很好的文章,Stripes book 中有几页关于它的文章。

    您基本上要么实现 ExceptionHandler 接口,从 DefaultExceptionHandler 扩展(我们通常会这样做),要么有 DelegatingExceptionHandler 用于更高级的情况。

    【讨论】:

    • 这仅涵盖 HTTP 500 错误。其他 5nn 和所有 4nn 错误本身不是由异常引起的。
    • 我认为这是相关的,因为 OP 询问了除 404 之外的错误代码。这实际上将涵盖大多数 404,因为 Stripes 拦截器尝试绑定大多数 URL 并在动作 bean 时抛出它自己的 404, jsp,或者找不到静态资源。
    猜你喜欢
    • 2020-07-14
    • 2022-06-21
    • 2019-09-18
    • 1970-01-01
    • 2011-07-07
    • 2018-02-16
    • 2019-08-26
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多