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()
<🎜>Mengembalikan maklumat yang tidak normal. Maklumat ini dimulakan dalam pembina Throwable | ||||||||||||||
2 | public ThrowablegetCause()<🎜> < 🎜 >Mengembalikan punca pengecualian, taip Objek boleh Lempar | ||||||||||||||
3 | String awam kepadaString()<🎜>< br /><🎜>Kembalikan nama kelas | ||||||||||||||
4 | public void printStackTrace()<🎜> < 🎜>Output surih tindanan pengecualian ke System.err | ||||||||||||||
5 | public StackTraceElement [] getStackTrace()<🎜 > <🎜>Kembalikan surih tindanan pengecualian dalam bentuk tatasusunan unsur surih tindanan | ||||||||||||||
6 | public ThrowablefillInStackTrace( ) strong><🎜> <🎜>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:
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