在servlet或者jsp运行的过程中,会出现一些异常,当这些异常在程序当中没有进行处理时,就会显示一个默认的异常页面,这可不是一件美妙的事情。因为容器默认的异常页面会显示一些异常的相关信息,这些信息对于程序员来说,是调试的好帮手;可是对于最终用户来说,那无异于天书,那我们怎么在出现一些异常信息的时候,让程序跳转到我们期望跳转的页面呢?我们来看servlet和jsp当中异常的处理。
异常处理分为两种
(1)声明式异常【web.xml】error-code or exception-type + location 【固定模板,手动配置】
(2)程序异常式处理【try catch】
一.声明市异常
![Servlet以及jsp异常的处理 - jiahong_zhao1986 - 凡人絮语](http://img7.ph.126.net/jZ_fkrzJInUEWcOwj2otbw==/6597327052377454877.jpg)
这样,当出现404错误的时候,页面就自动跳转到我们希望的页面(not_found.jsp)了。我们可以在web.xml中配置多个这样的错误代码的页面。这种错误代码的配置,对于jsp以及servlet都能够起作用。<error-page>
<error-code>404</error-code> <!-- 要捕捉的错误代码-->
<location>/not_found.jsp</location> <!--出现要捕捉的错误代码时,跳转到的页面-->
</error-page>
这样,我们在出现未捕捉的NullPointerException异常时,就可以跳转我们期望的页面。但是有一点一定要注意,<exception-type>标签中一定要写类的全名。<error-page>
<exception-type>java.lang.NullPointerException</exception-type> <!---要捕捉的异常类型->
<location>/null_pointer_handler.jsp</location> <!--出现异常时,跳转的页面-->
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/servlet/exceptionHandler</location>
</error-page>
如果我们要取出出现的异常,可以使用request.getAttribute(" javax.servlet.error.exception")来得到。下面是一个异常处理servlet的代码:javax.servlet.error.status_code 类型为Integer 错误状态代码javax.servlet.error.exception_type 类型为Class 异常的类型javax.servlet.error.message 类型为String 异常的信息javax.servlet.error.exception 类型为Throwable 异常类javax.servlet.error.request_uri 类型为String 异常出现的页面javax.servlet.error.servlet_name 类型为String 异常出现的servlet名
当然,我们也可以建立一个异常处理的jsp,原理是一样的。有兴趣,大家可以试试。public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //check the servlet exception Throwable throwable = (Throwable)request.getAttribute("javax.servlet.error.exception"); String servletName = (String)request.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null) servletName = "Unknown"; String requestUri = (String)request.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null) requestUri = "Unknown"; response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); out.println("<html>"); out.println("<head>"); out.println("<title>Error page</title>"); out.println("</head>"); out.println("<body>"); if (throwable == null){ out.println("<h2>The error information is not available</h2>"); out.println("Please return to the <a href=\"" + response.encodeURL("http://localhost:8080/home") + "\">home page</a>."); } else{ out.println("<h2>Here is the error information</h2>"); out.println( "The servlet name associated with throwing the exception: "+ servletName + "<br><br>"); out.println("The type of exception: " + throwable.getClass( ).getName( ) + "<br><br>"); out.println("The request URI: " + requestUri + "<br><br>"); out.println("The exception message: " + throwable.getMessage( )); } out.println("</body>"); out.println("</html>"); }
这样就可以完成异常的控制了。format.jsp
<%@ page errorPage="/exception_handler.jsp" %>
exception_handler.jsp
<%@ page isErrorPage="true" %>