当前位置 : 主页 > 编程语言 > java >

JSP Servlet中的最佳实践错误处理

来源:互联网 收集:自由互联 发布时间:2021-06-25
我在Oracle数据库上使用jsp / servlets有一个非常简单的Web应用程序.该应用程序目前只有少量页面,但它正在增长. 截至目前,我没有任何显示用户错误的东西.例如,如果数据库连接失败,则页面
我在Oracle数据库上使用jsp / servlets有一个非常简单的Web应用程序.该应用程序目前只有少量页面,但它正在增长.

截至目前,我没有任何显示用户错误的东西.例如,如果数据库连接失败,则页面只是空白.我很好奇错误处理的最佳做法是什么?我应该打印出堆栈跟踪吗?所有错误都应该转到默认错误页面吗?

任何建议或参考资料将不胜感激.你可能会说,这对我来说是个新鲜事.

谢谢

对于被认为是不可恢复的错误(例如数据库连接问题),这些类型的错误通常在应用程序中的最顶层捕获并在单个位置处理.许多框架会将这些转换为未经检查的exeptions,以避免中间层必须处理它们.

对于这些不可恢复的异常,通常您会向用户显示一个用户友好且相当通用的错误页面,并将堆栈跟踪(包含更详细的信息)发送到日志文件 – 供系统管理员和/或开发人员查询.

servlet规范提供了一种通过错误页面标记通过web.xml处理错误的方法.

如果您使用的是Servlet 3.0或更高版本,则可以在web.xml中添加:

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

这将捕获所有未处理的异常并将它们发送到webapp根目录中的error.html页面.

在servlet规范的早期版本中,您必须指定异常类型或错误代码(您仍可以执行更精细的错误处理):

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.html</location>
</error-page>

要么:

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

和:

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

另外,如果需要在错误页面中进行动态处理,可以转发到另一个JSP(或其他servlet):

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/error.jsp</location>
</error-page>

如果需要从错误页面内部访问异常(可能要显示异常保存的某些特定数据 – 例如代码),则可以通过javax.servlet.error.exception请求属性访问原始异常:

Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");

如果您的应用程序正在增长,您可能最好转到MVC框架 – 例如Spring MVC – 这将使您的应用程序更易于管理 – 此外它还将提供一致且定义良好的错误处理机制.

网友评论