[英]Handling exceptions in servlets
我有一个使用JSP和servlet的小型应用程序,用于演示,目前有类似这样的代码来处理DAO抛出的异常以及验证请求中的参数:
// Get ID from request.
int id = 0;
try {
id = Integer.parseInt(request.getParameter("id"));
}
catch (NumberFormatException e) {
messages.addMessage(e.getMessage());
request.setAttribute("messages", messages.getMessages());
response.sendRedirect("/jsp/exceptions/error500.jsp");
}
// Check person exists.
PersonDAOImpl personDAO = new PersonDAOImpl();
Person person = null;
try {
person = personDAO.get(id);
}
catch (DAOException e) {
messages.addMessage(e.getMessage());
request.setAttribute("messages", messages.getMessages());
response.sendRedirect("/jsp/exceptions/error500.jsp");
}
因此,当引发异常时,可以将其捕获在servlet中并显示在常规错误页面上。 消息对象只是消息实用程序类的一个实例,该实用程序类在数组列表中存储了许多消息。
但是让我感到困惑的是,如何最好地消除此类异常处理代码在servlet中引起的混乱:
messages.addMessage(e.getMessage());
request.setAttribute("messages", messages.getMessages());
response.sendRedirect("/jsp/exceptions/error500.jsp");
有任何想法吗?
目前,对简单验证消息的处理方式有所不同。 如果需要向用户显示消息,例如servlet的数字参数超出范围,则将消息写入Messages对象。 然后将该对象写入JSP,在此可以使用JSTL标记显示消息。 但是,这里可以使用通用例外。
我的主要目的是尝试保持简单而不用“过度”,因为此应用程序仅是一个演示。例如,是否在页面上显示stacktrace文本都没有关系。
一种选择是创建一个可以扩展的抽象父servlet类,然后在受保护的方法或变量中公开用于处理异常行为的逻辑,您可以从公共servlet对其进行访问。
您也可以在web.xml中添加以下内容:
<error-page>
<exception-type>java.lang.Exception</exception-type >
<location>/ErrorHandler</location>
</error-page>
我们将其用于具有JSF的小型项目的生产中,并将完成Servlet和JSP的工作。 更多信息在这里 。
我想做的是将生产中的异常隐藏起来,但是在开发中我们只显示它,这样可以加快开发速度。
只是要记住,要使用SOAP和REST很好地进行扩展,您可能需要做一些额外的工作,但是我认为对于您的情况来说应该没问题。
我现在有:
int id = 0;
try {
id = Integer.parseInt(request.getParameter("id"));
}
catch (NumberFormatException e) {
throw new ServletException(e);
}
在我的JSP中, <%@page isErrorPage="true" %>
看起来一切正常。
感谢答卷人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.