Pengendalian pengecualian JSP


Apabila menulis program JSP, pengaturcara mungkin terlepas beberapa pepijat dan pepijat ini mungkin muncul di mana-mana dalam program. Biasanya terdapat jenis pengecualian berikut dalam kod JSP:

  • Pengecualian yang disemak: Pengecualian yang disemak ialah ralat pengguna biasa atau ralat yang tidak dapat dijangka oleh pengaturcara. Contohnya, jika fail akan dibuka, tetapi fail itu tidak ditemui, pengecualian akan dilemparkan. Pengecualian ini tidak boleh diabaikan begitu sahaja pada masa penyusunan.

  • Pengecualian masa jalan: Pengecualian masa jalan mungkin telah dielakkan oleh pengaturcara.

  • Ralat: Tiada pengecualian di sini, tetapi masalahnya ialah ia di luar kawalan pengguna atau pengaturcara. Ralat sering diabaikan dalam kod dan terdapat sedikit yang boleh anda lakukan mengenainya. Contohnya, ralat limpahan tindanan. Ralat ini akan diabaikan pada masa penyusunan.

Bahagian ini akan memberi anda beberapa cara mudah dan elegan untuk mengendalikan pengecualian dan ralat masa jalan.


Menggunakan objek Exception

Objek pengecualian ialah contoh subkelas Boleh Lempar dan hanya tersedia dalam halaman ralat. Jadual berikut menyenaraikan beberapa kaedah penting dalam kelas Boleh Lempar:

Nombor siri Kaedah&Penerangan
1< strong>public String getMessage()
序号方法&描述
1public String getMessage()


返回异常的信息。这个信息在Throwable构造函数中被初始化
2public ThrowablegetCause()


返回引起异常的原因,类型为Throwable对象
3public String toString()


返回类名
4public void printStackTrace()


将异常栈轨迹输出至System.err
5public StackTraceElement [] getStackTrace()


以栈轨迹元素数组的形式返回异常栈轨迹
6public ThrowablefillInStackTrace()


使用当前栈轨迹填充Throwable对象

<🎜>Mengembalikan maklumat yang tidak normal. Maklumat ini dimulakan dalam pembina Throwable
2public ThrowablegetCause()<🎜>
< 🎜 >Mengembalikan punca pengecualian, taip Objek boleh Lempar
3String awam kepadaString()<🎜>< br /><🎜>Kembalikan nama kelas
4public void printStackTrace()<🎜>
< 🎜>Output surih tindanan pengecualian ke System.err
5public StackTraceElement [] getStackTrace()<🎜 >
<🎜>Kembalikan surih tindanan pengecualian dalam bentuk tatasusunan unsur surih tindanan
6public ThrowablefillInStackTrace( )<🎜>
<🎜>Gunakan surih tindanan semasa untuk mengisi objek Boleh Lempar

JSP menyediakan pilihan untuk menentukan halaman ralat untuk setiap halaman JSP. Setiap kali halaman membuang pengecualian, bekas JSP secara automatik memanggil halaman ralat.

Contoh berikut menentukan halaman ralat untuk main.jsp. Gunakan arahan <%@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>

Sekarang, tulis fail ShowError.jsp seperti berikut:

<%@ 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()); %>

Perhatikan bahawa fail ShowError.jsp menggunakan arahan <%@page isErrorPage="true"%> memberitahu Pengkompil JSP perlu menjana pembolehubah contoh pengecualian.

Sekarang cuba akses halaman utama.jsp, ia akan menghasilkan keputusan berikut:

java.lang.RuntimeException: Error condition!!!
......

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

Gunakan tag JSTL dalam halaman ralat

Anda boleh menggunakan tag JSTL untuk Menulis halaman ralat ShowError.jsp. Kod dalam contoh ini mempunyai logik yang hampir sama seperti kod dalam contoh sebelumnya, tetapi kod dalam contoh ini mempunyai struktur yang lebih baik dan boleh memberikan lebih banyak maklumat:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@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>

Hasil yang dijalankan adalah seperti berikut:

jsp-exeception-1.jpg


Guna try...catch block

Jika anda ingin meletakkan pengendalian pengecualian dalam satu halaman dan mengendalikan pengecualian yang berbeza secara berbeza maka anda perlu menggunakan try ... tangkap blok.

Contoh seterusnya menunjukkan cara menggunakan try...catch block dan letakkan kod ini dalam 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>

Cuba akses main.jsp, ia akan menghasilkan keputusan berikut :

rreeee