Penanganan Exception Jakarta EE Servlet

1. Perkenalan

Dalam tutorial ini, kita akan menangani pengecualian dalam aplikasi Jakarta EE Servlet - untuk memberikan hasil yang anggun dan diharapkan setiap kali terjadi kesalahan.

2. Pengecualian Servlet EE Jakarta

Pertama, kita akan mendefinisikan Servlet menggunakan anotasi API (lihat Servlets Intro untuk lebih jelasnya) dengan prosesor GET default yang akan memunculkan pengecualian:

@WebServlet(urlPatterns = "/randomError") public class RandomErrorServlet extends HttpServlet { @Override protected void doGet( HttpServletRequest req, HttpServletResponse resp) { throw new IllegalStateException("Random error"); } }

3. Penanganan Kesalahan Default

Sekarang mari kita menerapkan aplikasi ke dalam wadah servlet kita (kita akan menganggap bahwa aplikasi berjalan di bawah // localhost: 8080 / javax-servlets ).

Ketika kita mengakses alamat // localhost: 8080 / javax-servlets / randomError , kita akan melihat penanganan error servlet default di tempat:

Penanganan error default disediakan oleh servlet container dan dapat disesuaikan pada tingkat container atau aplikasi.

4. Penanganan Kesalahan Kustom

Kita dapat menentukan penanganan kesalahan khusus menggunakan deskriptor file web.xml di mana kita dapat menentukan jenis kebijakan berikut:

  • Penanganan kesalahan kode status - memungkinkan kita untuk memetakan kode kesalahan HTTP (klien dan server) ke halaman kesalahan HTML statis atau kesalahan penanganan servlet
  • Penanganan kesalahan tipe pengecualian - ini memungkinkan kita untuk memetakan tipe pengecualian ke halaman kesalahan HTML statis atau servlet penanganan kesalahan

4.1. Penanganan Kesalahan Kode Status dengan Halaman HTML

Kami dapat menyiapkan kebijakan penanganan kesalahan khusus kami untuk kesalahan HTTP 404 di web.xml :

  404 /error-404.html    

Sekarang, akses //localhost:8080/javax-servlets/invalid.html dari browser - untuk mendapatkan halaman kesalahan HTML statis.

4.2. Penanganan Kesalahan Jenis Pengecualian dengan Servlet

Kita dapat menyiapkan kebijakan penanganan kesalahan khusus untuk java.lang.Exception di web.xml :

  java.lang.Exception /errorHandler  

Di ErrorHandlerServlet , kita dapat mengakses detail kesalahan menggunakan atribut kesalahan yang disediakan dalam permintaan:

@WebServlet(urlPatterns = "/errorHandler") public class ErrorHandlerServlet extends HttpServlet { @Override protected void doGet( HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/html; charset=utf-8"); try (PrintWriter writer = resp.getWriter()) { writer.write("Error description"); writer.write("

Error description

"); writer.write("
    "); Arrays.asList( ERROR_STATUS_CODE, ERROR_EXCEPTION_TYPE, ERROR_MESSAGE) .forEach(e -> writer.write("
  • " + e + ":" + req.getAttribute(e) + "
  • ") ); writer.write("
"); writer.write(""); } } }

Sekarang, kita dapat mengakses // localhost: 8080 / javax-servlets / randomError untuk melihat kesalahan servlet bekerja.

Catatan : Jenis pengecualian kami yang didefinisikan di web.xml terlalu luas dan kami harus menentukan semua pengecualian yang ingin kami tangani secara lebih detail.

Kita juga dapat menggunakan logger servlet yang disediakan kontainer di komponen ErrorHandlerServlet untuk mencatat detail tambahan:

Exception exception = (Exception) req.getAttribute(ERROR_EXCEPTION); if (IllegalArgumentException.class.isInstance(exception)) { getServletContext() .log("Error on an application argument", exception); }

Perlu diketahui apa yang ada di luar mekanisme logging yang disediakan servlet, periksa panduan di slf4j untuk lebih jelasnya.

5. Kesimpulan

Dalam artikel singkat ini, kita telah melihat penanganan error default dan penanganan error kustom yang ditentukan dalam aplikasi servlet tanpa menambahkan komponen atau library eksternal.

Seperti biasa, Anda dapat menemukan kode sumber di repositori tutorial Servlets.