Java/Servlets/Exception
Содержание
Exceptions in Servlet
<source lang="java">
/* <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.ru/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/j2ee http://java.sun.ru/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>DeliberateException</servlet-name> <servlet-class>DeliberateException</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeliberateException</servlet-name> <url-pattern>/deliberateException</url-pattern> </servlet-mapping>
</web-app>
- /
import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DeliberateException extends HttpServlet {
public void init(ServletConfig config) throws ServletException { super.init(config); throw new NullPointerException(); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { ServletOutputStream out = res.getOutputStream(); res.setContentType("text/html"); out.println("<html><head><title>Exception Thrower</title></head>"); out.println("<body>You"ll never see this!</body></html>"); }
}
</source>
ForwardException - show forwarding an exception to an error page
<source lang="java">
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /*
* ForwardException - show forwarding an exception to an error page. * * @author Ian Darwin * @version $Id: ForwardException.java,v 1.2 2002/03/13 21:50:30 ian Exp $ */
public class ForwardException extends HttpServlet {
/** Called in response to a GET request (data encoded in the URL) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext application = getServletContext(); // BOILERPLATE beginning response.setContentType("text/html"); PrintWriter out = response.getWriter(); try { // to do: logic code and main HTML goes here. // simulate an error condition happening at run time. if (this instanceof Servlet) throw new RuntimeException("Test exception"); out.println("<!DOCTYPE html PUBLIC " + "\"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\n" + ">"); out.println("<html>"); out.println("<head><title>Servlet Output</title></head>"); out.println("<body>"); // BOILERPLATE ending out.println("</body>"); out.println("</html>"); out.close(); } catch (Exception exc) { // dispatch to JSP to display the error. RequestDispatcher rd = application.getRequestDispatcher("/oops.jsp"); request.setAttribute("javax.servlet.jsp.jspException", exc); rd.forward(request, response); } }
}
</source>
javax.servlet.error.request_uri
<source lang="java">
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 ErrorDisplay extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); String code = null, message = null, type = null, uri = null; Object codeObj, messageObj, typeObj; Throwable throwable; codeObj = req.getAttribute("javax.servlet.error.status_code"); messageObj = req.getAttribute("javax.servlet.error.message"); typeObj = req.getAttribute("javax.servlet.error.exception_type"); throwable = (Throwable) req.getAttribute("javax.servlet.error.exception"); uri = (String) req.getAttribute("javax.servlet.error.request_uri"); if (uri == null) { uri = req.getRequestURI(); // in case there"s no URI given } // Convert the attributes to string values if (codeObj != null) code = codeObj.toString(); if (messageObj != null) message = messageObj.toString(); if (typeObj != null) type = typeObj.toString(); // The error reason is either the status code or exception type String reason = (code != null ? code : type); out.println("<HTML>"); out.println("<HEAD><TITLE>" + reason + ": " + message + "</TITLE></HEAD>"); out.println("<BODY>");out.println("
" + reason + "
"); out.println("" + message + "
"); out.println(""); if (throwable != null) { throwable.printStackTrace(out); } out.println(""); out.println("
");
out.println("Error accessing " + uri + ""); out.println("</BODY></HTML>"); }
}
</source>