当前,我正在通过Web组件(Servlet和JSP)开发Web项目,Jsp组件使用“脚本元素”在产生异常时重定向请求(特别是指令元素和errorPage
属性) ,例如以下示例):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" errorPage="Error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
</head>
<body>
<form name="formulario" method="get" action="http://localhost:8080/Pruebas/LanzaError">
User: <input type="text" name="user">
<input type="submit" value="Send">
</form>
</body>
</html>
上面的JSP调用LanzaError
Servlet,该Servlet在doGet
方法中包含以下代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (true) {
throw new ServletException("Error de Servlet");
}
}
您怎么看,我故意制作了ServletException
。
就像我在指令元素中使用errorPage
属性一样,我认为JSP应该重定向到Error.jsp
页面,其中包含以下代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
</head>
<body>
<h1><%= exception.getLocalizedMessage() %></h1>
</body>
</html>
但是,当servlet产生异常时却没有发生。
有人知道在servlet中产生异常后如何重定向到Error.jsp页面吗?我不想用RequestDispatcher
代码来实现。我想从方法中抛出异常(就像方法签名所说的那样:throws ServletException,IOException`)。
感谢您的帮助。
已编辑--------------:
在网站link中,我阅读了以下评论:
一种通用的处理方式是使用web.xml,如下所示:
<error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location> </error-page>
我刚刚包含了IO异常,但您可能会说SQLException 您可以很好地添加另一个错误页面和另一个位置 相同。同样,您可以说java.lang.Exception类型和一个 处理一切的处理程序。
¡¡它起作用!但是,如果我添加xml error-page
元素,则对异常的控制将是绝对的,即,它们在servlet之间共享的每种类型的异常(或具有相等状态代码)都应具有相同的错误页面(由于在描述符web.xml中声明了这种方式)。如果我错了,请纠正我。
由于这个原因,我认为在任何情况下,当只有一个servlet抛出某个错误页面时,最合适的方法是使用`RequestDispatche'(通过这种方式,您不必向web.xml中添加任何其他新元素) )。
但是,现在我有一个新问题,在这段代码中,我添加了RequestDispatcher:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
if (true) {
throw new ServletException("Error de Servlet");
}
}catch(Exception e) {
RequestDispatcher rd = request.getRequestDispatcher("/Error.jsp");
rd.forward(request, response);
}
}
当请求最终到达Error.jsp
时,它不会像错误一样检测到该请求,因此,它不会检测到隐式对象exception
且Error.jsp
导致nullPointerException
。有人知道我该如何进行吗?
另一种处理方法可能是在servlet捕获的响应对象中添加一个属性,并带有错误消息,但是我不认为这是正确的处理方法(这会使{ jsp Web组件中的{1}}属性。
感谢您的时间。