2014-05-15 65 views
1

我使用演示JSP和servlet一个小的应用,目前有这样的代码,以处理DAO中抛出的异常和参数的验证从请求:处理异常在Servlet中

// 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中并显示在一般的错误页面上。消息对象只是Messages实用程序类的一个实例,它将一些消息存储在一个数组列表中。

但我困惑的是如何最好地消除由异常处理代码引起了servlet的这样杂乱的内容:

 messages.addMessage(e.getMessage()); 
     request.setAttribute("messages", messages.getMessages());    
     response.sendRedirect("/jsp/exceptions/error500.jsp"); 

任何想法?

简单验证消息目前的处理方式不同。如果需要向用户显示消息,例如如果一个servlet的数字参数超出范围,则这些消息将被写入一个Messages对象。然后将此对象写入JSP,使用JSTL标签可以显示消息。但是这里可以使用一个通用的例外。

我的主要目标是尽量保持这种简单而不会“过度”,因为这个应用程序只是一个演示。堆栈跟踪文本是否显示在页面上并不重要。

+0

你可以看看这个http://stackoverflow.com/questions/6182771/how-to-properly-handle-exceptions-in-a-jsp-servlet-app – user3470953

+0

等等,你在使用Spring框架吗?或只是普通的Java? – JamesENL

+0

我正在使用普通的Java。 –

回答

2

一种选择是创建一个可以扩展的抽象父类Servlet类,然后公开用于处理受保护方法或变量的异常行为的逻辑,您可以从公共Servlet访问这些异常行为。

您还可以添加这样的事情对你的web.xml:

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

我们使用,在生产与JSF小项目,并会为Servlet和JSP的工作。更多信息here

我喜欢做的是隐藏生产中的异常,但在开发中我们只是显示它,所以它有点加速了发展。

只要记住,为了使用SOAP和REST很好地进行扩展,您可能需要做一些额外的工作,但我认为对于您的场景它应该没问题。

0

我现在有:

int id = 0; 
    try { 
     id = Integer.parseInt(request.getParameter("id")); 
    } 
    catch (NumberFormatException e) {    
     throw new ServletException(e);   
    } 
在我的JSP

而且<%@page isErrorPage="true" %>,一切显示正常。

感谢受访者。