我有一個小的Java Web應用程序。它使用MVC,一個HttpServlet
作爲控制器和幾個JSP用於查看。JSP異常隱含對象
Servlet捕獲像SQLExceptions這樣的幾個異常,我需要在「ErrorPage」JSP中處理這些異常。 (JSP與指令<%@page isErrorPage="true" %>
。) 問題是,我怎樣才能從Servlet中設置「異常」JSP隱式對象?
(我用一個RequestDispatcher對象來控制傳遞給錯誤頁。)
我有一個小的Java Web應用程序。它使用MVC,一個HttpServlet
作爲控制器和幾個JSP用於查看。JSP異常隱含對象
Servlet捕獲像SQLExceptions這樣的幾個異常,我需要在「ErrorPage」JSP中處理這些異常。 (JSP與指令<%@page isErrorPage="true" %>
。) 問題是,我怎樣才能從Servlet中設置「異常」JSP隱式對象?
(我用一個RequestDispatcher對象來控制傳遞給錯誤頁。)
這是用法,
的Page1.jsp
<%@page errorPage="errorpage.jsp" %>
<%
//this has your code that throws some exception
%>
拋出的異常的JSP頁面將根據你的errorPage配置被捕獲。
的errorPage.jsp
<%@ page isErrorPage='true' %>
<%
out.print("Error Message : ");
out.print(exception.getMessage());
%>
異常對象代表所有的錯誤和異常。異常隱式對象的類型爲java.langThrowable。您可以使用page指令的isErrorPage屬性訪問聲明爲錯誤頁面的頁面上的異常對象。
僅當JSP使用頁面指令將isErrorPage
設置爲true時,纔會創建異常對象。當JSP生成一個錯誤,該錯誤轉發到錯誤頁面,容器設置錯誤頁面的JSP異常對象所產生的誤差
除了exception.getMessage()
,您還可以在exception
對象調用printStackTrace()
和toString()
。
這是你在問什麼?或者你想在你的Servlet類中處理異常?
而且,如果你配置你的web.xml這個樣子,
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.jsp</location>
</error-page>
,那麼對於所有的異常此錯誤頁面中調用,您可以使用exception
對象如上所述並調用其方法爲異常細節。 如果要針對特定異常配置特定錯誤頁面,請相應地更改<exception-type>
請注意,異常是由容器在遇到異常時設置的。如果您只是將控件轉發到錯誤頁面,它只會顯示該頁面。
更新:
try {
//sample code
data= dao.find(something);
}
catch (SQLException e) {
throw new ServletException("The query got failed", e);
}
的Servlet容器處理的ServletException。當容器在執行servlet的時候抓住它,然後將它的原因解開並與web.xml中的任何特定條目進行比較,並且會顯示最接近的匹配項。
<error-page>
<exception-type>java.sql.SQLException</exception-type>
<location>/errorpage.jsp</location>
</error-page>
更新2
再舉一個例子:
的web.xml
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.examples.example.Servlet1</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errorpage.jsp</location>
</error-page>
<error-page>
<exception-type>java.sql.SQLException</exception-type>
<location>/errorpage.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.jsp</location>
</error-page>
Servlet1.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String s = null;
if (s.equals("")) {
}
} catch (Exception ex) {
throw new ServletException("my custom exception message");
}
}
的errorPage.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isErrorPage='true'%>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<%
out.print("Error Message : ");
out.print(exception.getMessage());
%>
</body>
</html>
見下面我對如何配置和使用錯誤頁面,並利用JSP隱異常的反應。 – spiderman