处理 HTTP 状态代码的通用机制
我知道您可以在 web.xml 中指定错误页面,如下所示。
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
我发现为每个错误代码列出一个页面有点乏味。我想知道在这种情况下最好的常见做法是什么!是否有更好的方法自动生成这些页面,例如使用 JSP 或 servlet 或通过 Spring 或 Stripes?
I know you can specify error pages in web.xml as below
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
I find it a bit tedious to list a page for each and every error code. I was wondering what would be the best common practice in this situation! Is there a better way to generate these pages automatically such as using a JSP or servlet or via Spring or Stripes?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您正在谈论页面本身的生成,您可以将错误代码映射到 jsp 页面,例如,
如果您正在谈论映射本身,这是一个可能的解决方案(尽管我建议您使用标准的 web .xml 映射)避免映射所有错误代码的方法是使用 servlet 过滤器,该过滤器过滤所有资源,委托对 FilterChain 的访问,并检查响应代码集是否不是 200(或任何其他预定义的可接受的响应,例如 401)然后重定向到errors.jsp 页面。
为了捕获响应代码,您将使用保存响应代码集的 HttpServletResponseWrapper 实现来包装 HttpServletResponse。
If you're talking about the generation of the page itself, you can map an error code to a jsp page, e.g.
if you're talking about the mapping itself, a possible solution (though I'd advise you to use the standard web.xml mapping) to avoid mapping of all error codes is to use a servlet filter which filters all resources, delegates access to the FilterChain and checks the response code set if it is not 200 (or any other predefined acceptable responses such as 401) and than redirects to the errors.jsp page.
In order to capture the response code you'll to wrap the HttpServletResponse with a HttpServletResponseWrapper implementation that saves the response code set.
Stripes 提供了一些可扩展但简单的方法来处理异常。 stripes 网站上有一篇很好的文章,条纹书关于它。
本质上,您要么实现 ExceptionHandler 接口,从 DefaultExceptionHandler 扩展(我们通常这样做),要么使用 DelegatingExceptionHandler 来处理更高级的情况。
Stripes provides a few extensible yet simple ways to handle exceptions. There is a good writeup on the stripes website and a few pages in the Stripes book about it.
You'll essentially either implement the ExceptionHandler interface, extend from DefaultExceptionHandler (what we've typically done), or there is DelegatingExceptionHandler for more advanced situations.