gpt4 book ai didi

java - 处理 Servlet 中的异常

转载 作者:行者123 更新时间:2023-11-30 03:54:11 25 4
gpt4 key购买 nike

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

但是我感到困惑的是如何最好地消除由这样的异常处理代码在 servlet 中造成的困惑:

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

有什么想法吗?

当前对简单验证消息的处理方式有所不同。如果需要向用户显示消息,例如如果 servlet 的数字参数超出范围,则消息将写入 Messages 对象。然后将该对象写入 JSP,其中可以使用 JSTL 标记显示消息。但这里可以使用通用异常。

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

最佳答案

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

您还可以向 web.xml 添加类似的内容:

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

我们在 JSF 小型项目的生产中使用它,并将为 Servlet 和 JSP 完成工作。更多信息here .

我喜欢做的是隐藏生产中的异常,但在开发中我们只是显示它,这样可以加快开发速度。

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

关于java - 处理 Servlet 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23668269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com