Jakarta EE Servlet Exception Handling

1. Uvod

U ovom uputstvu bavit ćemo se iznimkama u aplikaciji Jakarta EE Servlet - kako bismo pružili graciozan i očekivan ishod kad god se dogodi pogreška.

2. Izuzeci za Jakarta EE Servlet

Prvo ćemo definirati Servlet koristeći API bilješke (pogledajte Servlets Intro za više detalja) sa zadanim DOBITI procesor koji će izbaciti iznimku:

@WebServlet (urlPatterns = "/ randomError") javna klasa RandomErrorServlet proširuje HttpServlet {@Override zaštićeni void doGet (HttpServletRequest req, HttpServletResponse resp) {baciti novu IllegalStateException ("RandomException (" RandomError ");" }}

3. Zadana obrada pogrešaka

Ajmo sada jednostavno rasporediti aplikaciju u naš spremnik servleta (pretpostavit ćemo da aplikacija radi pod // localhost: 8080 / javax-servlets).

Kad pristupimo adresi // localhost: 8080 / javax-servlets / randomError, vidjet ćemo zadani način rukovanja pogreškama servleta:

Zadano rukovanje pogreškama pruža spremnik servleta i može se prilagoditi na razini spremnika ili aplikacije.

4. Prilagođeno rukovanje pogreškama

Prilagođeno rukovanje pogreškama možemo definirati pomoću a web.xml deskriptor datoteke u kojem možemo definirati sljedeće vrste pravila:

  • Rukovanje pogreškama statusnog koda - omogućuje nam mapiranje HTTP kodova pogrešaka (klijenta i poslužitelja) na statičnu stranicu HTML pogreške ili servlet za obradu pogrešaka
  • Obrada pogrešaka tipa iznimke - omogućuje nam mapiranje vrsta izuzetaka na statičke HTML stranice s pogreškama ili servlet za rukovanje pogreškama

4.1. Rukovanje pogreškama statusnog koda s HTML stranicom

Možemo postaviti prilagođenu politiku postupanja s pogreškama za HTTP 404 pogreške u web.xml:

  404 /pogreška-404.html 

Sada, pristup //localhost:8080/javax-servlets/invalid.html iz preglednika - da biste dobili stranicu sa statičnom HTML pogreškom.

4.2. Rukovanje pogreškama tipa iznimke pomoću servleta

Možemo postaviti prilagođenu politiku postupanja s pogreškama za java.lang.Izuzetak u web.xml:

  java.lang.Exception / errorHandler 

U ErrorHandlerServlet, pojedinostima pogreške možemo pristupiti pomoću atributa pogreške navedenih u zahtjevu:

@WebServlet (urlPatterns = "/ errorHandler") javna klasa ErrorHandlerServlet proširuje HttpServlet {@Override zaštićeni void doGet (HttpServletRequest req, HttpServletResponse resp) baca IOException {respml.setCon {html-setCot {respml.setCon; probajte (PrintWriter Writer = resp.getWriter ()) {Writer.write ("Opis pogreške"); Writer.Write ("

Opis pogreške

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

Sad možemo pristupiti // localhost: 8080 / javax-servlets / randomError da biste vidjeli kako radi prilagođeni servlet za pogreške.

Bilješka: Naš tip iznimke definiran u web.xml je preširok i trebali bismo detaljnije navesti sve iznimke koje želimo riješiti.

Također možemo koristiti spremnik servleta zapisnika u našem ErrorHandlerServlet komponenta za bilježenje dodatnih detalja:

Iznimka iznimka = (Iznimka) req.getAttribute (ERROR_EXCEPTION); if (IllegalArgumentException.class.isInstance (iznimka)) {getServletContext () .log ("Pogreška na argumentu aplikacije", iznimka); }

Vrijedno je znati što je dalje od mehanizama za prijavljivanje koji pruža servlet, za više detalja pogledajte vodič na slf4j.

5. Zaključak

U ovom kratkom članku vidjeli smo zadano rukovanje pogreškama i specificirano prilagođeno rukovanje pogreškama u aplikaciji servleta bez dodavanja vanjskih komponenata ili knjižnica.

Kao i uvijek, izvorni kod možete pronaći na spremištu tutorijala Servlets.