Servlet如何编写异常呢?
下文讲述常见的Servlet抛出异常的处理方法分享,
实现思路: 1.在web.xml中的exception-type定义相应的异常类型及所对应的处理Servlet 2.在web.xml中使用error-page设置相应的状态码对应的Servlet例: 使用 ExceptionHandler Servlet处理异常的Servlet
<!-- servlet 定义 --> <servlet> <servlet-name>ExceptionHandler</servlet-name> <servlet-class>com.java265.ExceptionHandler</servlet-class> </servlet> <!-- servlet 映射 --> <servlet-mapping> <servlet-name>ExceptionHandler</servlet-name> <url-pattern>/com.java265.ExceptionHandler</url-pattern> </servlet-mapping> <!-- error-code 相关的错误页面 --> <error-page> <error-code>404</error-code> <location>/ExceptionHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ExceptionHandler</location> </error-page> <!-- exception-type 相关的错误页面 --> <error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ExceptionHandler</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type > <location>/ExceptionHandler</location> </error-page>
exception-type注意事项: java.lang.Throwable可以接收所有异常类型 -------------------------------------- 如:想配置所有异常所对应的Servlet <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ExceptionHandler</location> </error-page> 当我们在web.xml中采用以上配置后, 无论异常还是 403,500,404等状态码, 都会调用 ExceptionHandler Servlet进行相应的处理例:
ServletHelloWorld.java package servlet01; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletHelloWorld extends HttpServlet { private static final long serialVersionUID = 888; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendError(500, "Server Exception!"); } } ExceptionHandler.java package servlet01; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ExceptionHandler extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub Throwable throwable = (Throwable) req.getAttribute("javax.servlet.error.exception"); Integer statusCode = (Integer) req.getAttribute("javax.servlet.error.status_code"); String servletName = (String) req.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null) { servletName = "Unknown"; } String requestUri = (String) req.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null) { requestUri = "Unknown"; } // 设置响应内容类型 resp.setContentType("text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); String title = "Java265教程 Error/Exception 信息"; String docType = "<!DOCTYPE html>\n"; out.println( docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n"); out.println("<h1>Java265教程异常信息实例演示</h1>"); if (throwable == null && statusCode == null) { out.println("<h2>错误信息丢失</h2>"); out.println("请返回 <a href=\"" + resp.encodeURL("http://localhost:8080/servlet01") + "\">主页</a>。"); } else if (statusCode != null) { out.println("错误代码 : " + statusCode); } else { out.println("<h2>错误信息</h2>"); out.println("Servlet Name : " + servletName + "</br></br>"); out.println("异常类型 : " + throwable.getClass().getName() + "</br></br>"); out.println("请求 URI: " + requestUri + "<br><br>"); out.println("异常信息: " + throwable.getMessage()); } out.println("</body>"); out.println("</html>"); } } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>servlet01</display-name> <servlet> <servlet-name>helloWorld</servlet-name> <servlet-class>servlet01.ServletHelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloWorld</servlet-name> <url-pattern>/index</url-pattern> </servlet-mapping> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>servlet01.ExceptionHandler</servlet-class> </servlet> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern> </servlet-mapping> <!-- error-code 相关的错误页面 --> <error-page> <error-code>404</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>500</error-code> <location>/ErrorHandler</location> </error-page> <!-- exception-type 相关的错误页面 --> <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page> </web-app>运行效果如下图所示:
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。