Saat menulis program JSP, pemrogram mungkin melewatkan beberapa bug, dan bug ini mungkin muncul di mana saja di dalam program. Biasanya ada jenis pengecualian berikut dalam kode JSP:
Pengecualian yang dicentang: Pengecualian yang dicentang adalah kesalahan umum pengguna atau kesalahan yang tidak dapat diperkirakan oleh pemrogram. Misalnya, jika suatu file akan dibuka, tetapi file tersebut tidak dapat ditemukan, pengecualian akan diberikan. Pengecualian ini tidak bisa diabaikan begitu saja pada waktu kompilasi.
Pengecualian run-time: Pengecualian run-time mungkin dihindari oleh pemrogram. Pengecualian ini akan diabaikan pada waktu kompilasi.
Kesalahan: Tidak ada pengecualian di sini, tetapi masalahnya adalah hal ini di luar kendali pengguna atau pemrogram. Kesalahan sering kali diabaikan dalam kode dan hanya sedikit yang dapat Anda lakukan untuk mengatasinya. Misalnya, kesalahan stack overflow. Kesalahan ini akan diabaikan pada waktu kompilasi.
Bagian ini akan memberi Anda beberapa cara sederhana dan elegan untuk menangani pengecualian dan kesalahan runtime.
Objek pengecualian adalah turunan dari subkelas Throwable dan hanya tersedia di halaman kesalahan. Tabel berikut mencantumkan beberapa metode penting di kelas Throwable:
nomor seri | Metode & Deskripsi |
---|---|
1 | public String getMessage() mengembalikan informasi pengecualian. Informasi ini diinisialisasi dalam konstruktor Throwable |
2 | public ThrowablegetCause() mengembalikan penyebab pengecualian, tipenya adalah objek Throwable |
3 | public String toString() mengembalikan nama kelas |
4 | public void printStackTrace() menampilkan jejak tumpukan pengecualian ke System.err |
5 | public StackTraceElement [] getStackTrace() mengembalikan jejak tumpukan pengecualian dalam bentuk array elemen jejak tumpukan |
6 | public ThrowablefillInStackTrace() menggunakan pelacakan tumpukan saat ini untuk mengisi objek Throwable |
JSP menyediakan opsi untuk menentukan halaman kesalahan untuk setiap halaman JSP. Setiap kali halaman memunculkan pengecualian, kontainer JSP secara otomatis memanggil halaman kesalahan.
Contoh berikut menentukan halaman kesalahan untuk main.jsp. Gunakan direktif <%@page errorPage="XXXXX"%> untuk menentukan halaman kesalahan.
<%@ page errorPage="ShowError.jsp" %><html><head> <title>Contoh Penanganan Kesalahan</title></head><body><% // Melemparkan pengecualian untuk memanggil halaman kesalahan int x = 1; jika (x == 1) { throw new RuntimeException("Kondisi kesalahan!!!"); %></body></html>
Sekarang, tulis file ShowError.jsp sebagai berikut:
<%@ page isErrorPage="true" %><html><head><title>Tampilkan Halaman Kesalahan</title></head><body><h1>Ups...</h1><p>Maaf, terjadi kesalahan.</p><p>Berikut adalah pelacakan tumpukan pengecualian: </p><pre><% pengecualian.printStackTrace(response.getWriter() %>
Perhatikan bahwa file ShowError.jsp menggunakan direktif <%@page isErrorPage="true"%>, yang memberitahu kompiler JSP bahwa ia perlu menghasilkan variabel instan pengecualian.
Sekarang coba akses halaman main.jsp, maka akan muncul hasil sebagai berikut:
java.lang.RuntimeException: Kondisi kesalahan!!!......Opps...Maaf, terjadi kesalahan. Berikut adalah jejak tumpukan pengecualian:
Anda dapat menggunakan tag JSTL untuk menulis halaman kesalahan ShowError.jsp. Kode pada contoh ini memiliki logika yang hampir sama dengan kode pada contoh sebelumnya, namun kode pada contoh ini memiliki struktur yang lebih baik dan memberikan lebih banyak informasi:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isErrorPage="true" %><html><head><title> Tampilkan Halaman Kesalahan</title></head><body><h1>Ups...</h1><table><tr valign="top"><td><b>Kesalahan:</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 kode:</b></td><td>${pageContext.errorData.statusCode</td></tr><tr valign="top"><td><b>Pelacakan tumpukan:</b> </td><td><c:forEach var="jejak" item="${pageContext.Exception.stackTrace}"><p>${trace}</p></c:forEach></td></tr></table></body></html>
Hasil yang berjalan adalah sebagai berikut:
Jika Anda ingin menempatkan penanganan pengecualian di halaman dan menangani pengecualian yang berbeda secara berbeda, maka Anda perlu menggunakan blok try...catch.
Contoh berikut menunjukkan cara menggunakan blok try...catch dengan menempatkan kode ini di main.jsp:
<html><head> <title>Coba...Tangkap Contoh</title></head><body><% coba{ int i = 1; i = i / 0; + i); } catch (Pengecualian e){ out.println("Terjadi pengecualian: " + e.getMessage());
Coba akses main.jsp, maka akan muncul hasil sebagai berikut:
Terjadi pengecualian: / oleh nol