異常處理

1、web.xml
  i.error-code:錯誤碼 
  <error-page>  
      <error-code>404</error-code> 
      <location>/404.jsp</location>
  </error-page>
  
  ii.exception-type
當servlet執行時,可能產生許多異常。而當異常產生時,Web容器將產生一個包含A Servlet Has Occurred消息的缺省頁。但是,用戶也可返回一個容器,該容器應包含為給定異常指定的錯誤頁。
  <error-page>  
      <exception-type>org.sprngside.bookstore.UserNotFound</exception-type>  
      <location>/userNotFound.jsp</location>
  </error-page>
  
  
2、jsp
 <@ errorPage="error.jsp">


3、Spring MVC里的異常控制
   spring-mvc可在xxx-serverlet.xml里定義default和 按Excepiton類型影射的錯誤頁面,
   和Servlet規范比,主要作了Spring特色的JSP路徑轉向和日志記錄.參見bookstore-servlet.xml
  
 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="defaultErrorView" value="/error.jsp"/>
      <property name="exceptionMappings">
           <props>               
                <prop key="org.springside.framework.base.BusinessException">/businessError.jsp</prop>
            </props>       
       </property>   
 </bean>

 

=========================================
  error.jsp會同時處理jsp,servlet,和spring拋過來的異常
  
  jsp的異常在exception 變量中.(要指定<%@ page isErrorPage="true" %>)
  
  spring的異常在(Exception) request.getAttribute("exception")
  
  servlet的異常在(Exception)request.getAttribute("javax.servlet.error.exception")
  
  使用 (String) request.getAttribute("javax.servlet.error.request_uri")獲得 request_uri
  使用 logger.error(exception.getMessage(), exception); 記錄整個異常棧

   
  · javax.servlet.error.exception:實際的異常擲出的Throwable對象
  · javax.servlet.error.request_uri:導致問題產生的資源的URI字符串對象
  · javax.servlet.error.status_code:錯誤類型的整形值
  · javax.servlet.error.exception_type:產生錯誤的異常類的實例
  · javax.servlet.error.message:異常信息字符串
  
  


error.jsp 完整的代碼

<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" %>
<%@ page import="org.apache.commons.logging.LogFactory" %>
<%@ taglib prefix="c" uri=" <html>
<head>
    <title>Error Page</title>
    <script src="<c:url value="/scripts/prototype.js"/>" type="text/javascript"></script>
    <script language="javascript">
        function showDetail()
        {
            $('detail_error_msg').toggle();
        }
    </script>
</head>

<body>

<div id="content">
    <%
        //Exception from JSP didn't log yet ,should log it here.
        String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri");
        LogFactory.getLog(requestUri).error(exception.getMessage(), exception);
    %>

    <h3>System Runtime Error: <br><%=exception.getMessage()%></h3><br>

    <button onclick="history.back();">Back</button><br>

    <p><a href="#" onclick="showDetail();">Administrator click here to get the detail.</a></p>

    <div id="detail_error_msg" style="display:none">
        <pre><%exception.printStackTrace(new java.io.PrintWriter(out));%></pre>
    </div>
</div>
</body>
</html>