繁体   English   中英

在servlet中处理异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM