jsp中錯誤處理

來源:互聯網
上載者:User
jsp中錯誤處理頁面-isErrorPage="true"2008-11-18 11:03
舉例說明:mustBeError.jsp

<%@ page contentType="text/html; charset=gb2312"
language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*" errorPage="error.jsp" %>
<%
//這個頁面一定會出錯。
int i=0;
int j=1;
out.println(j/i);
%>

在此中通過errorPage="error.jsp"來指定出錯時錯誤處理頁面

---------------------------
error.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" isErrorPage="true" import="java.io.*"%>
<html>
<head>
<title>出錯了!</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
出錯了!<br>
發生了以下的錯誤:
<br><hr><font color=red><hr>
getMessage():<br>
<%=exception.getMessage()%><br><hr>
getLocalizedMessage():<br>
<%=exception.getLocalizedMessage()%><br><hr>
PrintStatckTrace():<br>
<%
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
exception.printStackTrace(pw);
out.println(sw);
%><br>
</font></body>
</html>

在error.jsp中,page指令中指定:isErrorPage="true"

<---------------------->
在web.xml中聲明異常和錯誤頁面

例如:
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
<error-page>
<error-code>404</error-code>
<location>/pageNotFound.html</location>
</error-page>

<error-page>
<exception-type>java.lang.NumberFormatException</exception-type>
<location>/NumberFormatException.html</location>
</error-page>

</web-app>

說明:指定錯誤碼為404是,調用/pageNotFound.html
也可以指定錯誤類型如:java.lang.NumberFormatException,出現此錯誤類型是調用/NumberFormatException.html

文章引用自:http://www.zhuoda.org/air_tuyh/26516.html

 

=========================

http://www.51cto.com/art/200704/46521.htm

由於JSP檔案被編譯成Servlet執行,出現異常的預設操作就是顯示異常的堆棧。JSP頁面提供了重寫這個預設行為的功能,並且將異常處理轉到另一個檔案中:

<%@ page errorPage="error.jsp"%>

這樣在這個JSP頁面中,如果遇到任何未捕獲到的Throwable對象,那麼就會顯示指定的出錯頁面。

下面我們來看一個具體的例子。首先我們開發一個會出錯的頁面,如常式10-10所示。

常式10-10 會出錯的頁面(mustBeError.jsp)

<%@ page contentType="text/html; charset=gb2312"
language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*"
errorPage="error.jsp" %>
<%
//這個頁面一定會出錯
int i=0;
int j=1;
//以下代碼一定產生執行階段錯誤
out.println(j/i);
%>

從代碼可以看出,這個頁面必定會出錯誤。在這個頁面的page指令中,通過errorPage="error.jsp"指定出錯時的錯誤處理頁面。

我們來看錯誤處理頁面的具體代碼,如常式10-11所示。

常式10-11 錯誤處理頁面(error.jsp)

<%@ page contentType="text/html; charset=gb2312" language="java"
isErrorPage="true" import="java.io.*"%>
<html>
<head>
<title>出錯了!</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
出錯了!<br>

發生了以下的錯誤:

<br><hr><font color=red><hr>
getMessage():<br>
<%=exception.getMessage()%><br><hr>
getLocalizedMessage():<br>
<%=exception.getLocalizedMessage()%><br><hr>
PrintStatckTrace():<br>
<%
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
exception.printStackTrace(pw);
out.println(sw);
%><br>
</font></body>
</html>

在error.jsp中,首先在page指令中指定:

isErrorPage="true"

這是非常關鍵的地方,只有這樣指定,這個頁面才能進行錯誤處理,才能使用exception對象。

exception對象有幾個非常重要的方法,用於獲得出錯的資訊,這些方法如下:

<%=exception.getMessage()%>
<%=exception.getLocalizedMessage()%>
<% exception.printStackTrace(PrintWriter);%>

最後一個方法用於列印錯誤堆棧。如果需要在錯誤頁面以外使用這個exception對象,那麼可以這樣把exception對象儲存起來:

session.setAttribute("myError",exception);

在另一個頁面使用:

Exception exception=( Exception )session.getAttribute("myError");

把這個異常對象引入進來。

在瀏覽器裡輸入:http://127.0.0.1:8080/ch10/mustBeError.jsp。由於這個頁面必定產生運行時異常,它將自動調用http://127.0.0.1:8080/ch10/error.jsp頁面。啟動並執行效果10-3所示。

圖10-3 自訂錯誤頁面

以上是JSP頁面內部出現錯誤的處理情況。如果異常在JavaBean中產生,那麼將怎麼辦呢?具體的方法是在JavaBean中把異常拋出到JSP頁面,如果JSP頁面沒有捕獲這個異常,那麼也到錯誤頁面中處理。我們再來看一個例子,假設有一個JavaBean,用於計算兩個整數的和,代碼如常式10-12所示。

常式10-12 計算兩個整數和的JavaBean(AddJavaBean.java)

package com.jspdev.ch10;
//用於計算兩個整數的和,可能在Integer.parseInt方法中出現異常
public class AddJavaBean
{
public int add(String x,String y)throws Exception
{
int ret=0;
try
{
ret=Integer.parseInt(x)+Integer.parseInt(y);
}
catch(Exception e)
{
throw e;
}
return ret;  
}
}

在常式10-12中,可能在Integer.parseInt方法中出現異常。當出現這個異常時,就把這個異常拋出到JSP頁面。我們看在JSP頁面中怎麼使用這個類,並且怎麼處理異常,如常式10-13所示。

常式10-13 JSP對JavaBean中拋出異常的處理(add.jsp)

<%@ page contentType="text/html; charset=gb2312"
import="com.jspdev.ch10.*" language="java" errorPage="error.jsp" %>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<hr>
<center>
<%
String x=request.getParameter("x");
String y=request.getParameter("y");
AddJavaBean addBean=new AddJavaBean();
%>
<%=x%>+<%=y%>=<%=addBean.add(x,y)%>
<hr>
add.test<br>
<form action="add.jsp" method="get">
<table><tr><td>x:
<input type="text" name="x"></td></tr>
<tr><td>y:<input type="text" name="y"></td></tr>
<tr><td><input type="submit" value=add></td></tr>
</table>
</form>
</center>
</body>
</html>

從代碼可以看出,在這個頁面中沒有捕獲JavaBean中產生的異常,這樣就會自動調用錯誤處理頁面。

在瀏覽器裡輸入http://127.0.0.1:8080/ch10/add.jsp?x=12&y=112將會運行正常。在表單中填寫以下的值:

x=12,y=sdkjf

那麼必定產生運行異常,這個異常將在error.jsp中進行處理,10-4所示。

當輸入以上的值提交後,將在error.jsp中捕獲到NumberFormatException,10-5所示。

圖10-4 在add.jsp中輸入會產生異常的資訊
圖10-5 在error.jsp中處理add.jsp中的異常

我們進一步把以上的實踐升華一下,總結出一句話:JSP錯誤處理本質就是在不同的頁面或者類中傳遞異常,並且在目標頁面處理異常。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.