JSP 異常處理如何處理?
導讀 | 當編寫JSP程式的時候,程式設計師可能會遺漏一些BUG,這些BUG可能會出現在程式的任何地方。 |
JSP程式碼中通常有以下幾類異常:
檢查型異常:檢查型異常就是一個典型的使用者錯誤或者一個程式設計師無法預見的錯誤。舉例來說,如果一個檔案將要被開啟,但是無法找到這個檔案,則一個異常被丟擲。這些異常不能在編譯期被簡單地忽略。
執行時異常:一個執行時異常可能已經被程式設計師避免,這種異常在編譯期將會被忽略。
錯誤:錯誤不是異常,但問題是它超出了使用者或者程式設計師的控制範圍。錯誤通常會在程式碼中被忽略,您幾乎不能拿它怎麼樣。舉例來說,棧溢位錯誤。這些錯誤都會在編譯期被忽略。
本節將會給出幾個簡單而優雅的方式來處理執行時異常和錯誤。
exception物件是Throwable子類的一個例項,只在錯誤頁面中可用。下表列出了Throwable類中一些重要的方法:
序號 | 方法& 描述 |
---|---|
1 |
public String getMessage()
返回異常的資訊。這個資訊在Throwable建構函式中被初始化 |
2 |
public ThrowablegetCause()
返回引起異常的原因,型別為Throwable物件 |
3 |
public String toString()
返回類名 |
4 |
public void printStackTrace()
將異常棧軌跡輸出至System.err |
5 |
public StackTraceElement [] getStackTrace()
以棧軌跡元素陣列的形式返回異常棧軌跡 |
6 |
public ThrowablefillInStackTrace()
使用當前棧軌跡填充Throwable物件 |
JSP提供了可選項來為每個JSP頁面指定錯誤頁面。無論何時頁面丟擲了異常,JSP容器都會自動地呼叫錯誤頁面。
接下來的例子為main.jsp指定了一個錯誤頁面。使用<%@page errorPage="XXXXX"%>指令指定一個錯誤頁面。
<%@ page errorPage="ShowError.jsp" %><html><head> <title>Error Handling Example</title></head><body><% // Throw an exception to invoke the error page int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); }%></body></html>
現在,編寫ShowError.jsp檔案如下:
<%@ page isErrorPage="true" %><html><head><title>Show Error Page</title></head><body><h1>Opps...</h1><p>Sorry, an error occurred.</p><p>Here is the exception stack trace: </p><pre><% exception.printStackTrace(response.getWriter()); %>
注意到,ShowError.jsp檔案使用了<%@page isErrorPage="true"%>指令,這個指令告訴JSP編譯器需要產生一個異常例項變數。
現在試著訪問main.jsp頁面,它將會產生如下結果:
java.lang.RuntimeException: Error condition!!! ...... Opps... Sorry, an error occurred. Here is the exception stack trace:
可以利用JSTL標籤來編寫錯誤頁面ShowError.jsp。這個例子中的程式碼與上例程式碼的邏輯幾乎一樣,但是本例的程式碼有更好的結構,並且能夠提供更多資訊:
<%@ taglib prefix="c" uri="%><%@page isErrorPage="true" %><html><head><title>Show Error Page</title></head><body><h1>Opps...</h1><table width="100%" border="1"><tr valign="top"><td width="40%"><b>Error:</b></td><td>${pageContext.exception}</td></tr><tr valign="top"><td><b>URI:</b></td><td>${pageContext.errorData.requestURI}</td></tr><tr valign="top"><td><b>Status code:</b></td><td>${pageContext.errorData.statusCode}</td></tr><tr valign="top"><td><b>Stack trace:</b></td><td><c:forEach var="trace" items="${pageContext.exception.stackTrace}"><p>${trace}</p></c:forEach></td></tr></table></body></html>
執行結果如下:
jsp-exeception-1
如果您想要將異常處理放在一個頁面中,並且對不同的異常進行不同的處理,那麼您就需要使用try…catch塊了。
接下來的這個例子顯示瞭如何使用try…catch塊,將這些程式碼放在main.jsp中:
<html><head> <title>Try...Catch Example</title></head><body><% try{ int i = 1; i = i / 0; out.println("The answer is " + i); } catch (Exception e){ out.println("An exception occurred: " + e.getMessage()); }%></body></html>
試著訪問main.jsp,它將會產生如下結果:
An exception occurred: / by zero
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2789946/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異常處理
- 異常篇——異常處理
- React 異常處理React
- JS異常處理JS
- oracle異常處理Oracle
- Python——異常處理Python
- Python異常處理Python
- ThinkPHP 異常處理PHP
- JavaScript 異常處理JavaScript
- JAVA 異常處理Java
- 異常的處理
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- Java 異常處理Java
- Abp 異常處理
- JAVA異常處理Java
- 08、異常處理
- SpringMVC異常處理SpringMVC
- 異常處理機制(二)之異常處理與捕獲
- 如何優雅處理前端異常?前端
- 如何使用SpringMvc處理Rest異常SpringMVCREST
- 如何優雅的處理異常
- Python錯誤處理和異常處理(二)Python
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- NodeJS之異常處理NodeJS
- JAVA_異常處理Java
- React Native 異常處理React Native
- Spring Boot 異常處理Spring Boot
- PHP 核心 - 異常處理PHP
- GRpc異常處理FilterRPCFilter
- python異常捕捉處理Python
- 14. 異常處理
- 異常處理機制
- 異常處理方式throws
- 處理多個異常
- 異常處理全面解析
- Python Selenium異常處理Python