Java 如何捕获JSP文件中的异常?
我使用ExceptionHandler在控制器中捕获异常Java 如何捕获JSP文件中的异常?,java,spring,jsp,exception,exception-handling,Java,Spring,Jsp,Exception,Exception Handling,我使用ExceptionHandler在控制器中捕获异常 @ExceptionHandler(value = {Exception.class, RuntimeException.class}) public final ModelAndView globalExceptionHandler(final Exception exception) { ModelAndView modelAndView = new ModelAndView("error/500"); modelAn
@ExceptionHandler(value = {Exception.class, RuntimeException.class})
public final ModelAndView globalExceptionHandler(final Exception exception) {
ModelAndView modelAndView = new ModelAndView("error/500");
modelAndView.addObject("tl_exception", errorSystem.processingError(exception));
return modelAndView;
}
但,例如,若在jsp文件中,我试图从空对象获取数据,那个么这不是一个例外
我需要建议,如何在jsp文件中捕获异常?或者我只需要在控制器中捕捉所有错误
更新:
最好的解决方案是将错误放在web.xml uri中
<error-page>
<location>/error</location>
</error-page>
有一些选择 首先,您可以使用web.xml捕获某些特定类型的异常(或使用java.lang.Throwable捕获所有异常),例如添加以下内容:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
java.lang.Throwable
/error.jsp
或:
java.lang.arithmetricException
/error.jsp
另一种方法是使用@ExceptionHandler注释,请查找更多添加到@astrohome-answer,
JSP
还提供了为每个JSP指定错误页面的选项。每当页面抛出异常时,JSP容器就会自动调用错误页面
要设置错误页面,请使用
指令
在上面提到的错误处理JSP中,包含指令
例如,假设您有一个JSP页面名main.JSP
,您正试图对其执行空对象操作
main.jsp
<%@ page errorPage="show-error.jsp" %>
<html>
<head>
<title>Page on which Error Occurs</title>
</head>
<body>
</body>
</html>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error</title>
</head>
<body>
<p>Exception stack trace:<% exception.printStackTrace(response.getWriter()); %>
</p>
</body>
</html>
发生错误的页面
显示错误.jsp
<%@ page errorPage="show-error.jsp" %>
<html>
<head>
<title>Page on which Error Occurs</title>
</head>
<body>
</body>
</html>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error</title>
</head>
<body>
<p>Exception stack trace:<% exception.printStackTrace(response.getWriter()); %>
</p>
</body>
</html>
显示错误
异常堆栈跟踪:
如果您只想重定向到错误页面,astrohome和Arpit提出的解决方案很好
如果你真的想抓住它们并能做任何事情,你还有两种方法:
public class exceptFilter implements Filter {
...
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException
try {
fc.doFilter(req, resp);
}
catch (Exception ex) {
// Exception processing ...
}
}
...
}
但是请注意,当您捕获异常时,响应可能已经提交HandlerExceptionResolver
bean。您将在-it中找到它的引用,它或多或少像一个全局的@ExceptionHandler
,但它甚至会在控制器动作之前和之后动作您使用的是JSP标准标记库吗?更干净的方法;当将此页面提供给用户时,还可以将其存根为:System.out.println(exception.toString());-这样,他们只看到英文消息,而您在日志中有自己的调试信息。