Jakarta EE Servlet kivételes kezelése

1. Bemutatkozás

Ebben az oktatóanyagban a Jakarta EE Servlet alkalmazás kivételeit fogjuk kezelni - annak érdekében, hogy kecses és várható eredményt kapjunk, amikor hiba történik.

2. Jakarta EE Servlet kivételek

Először definiálunk egy Servletet az API kommentárokkal (további részletekért tekintse meg a Servlets Intro-t) alapértelmezettel KAP processzor, amely kivételt vet:

@WebServlet (urlPatterns = "/ randomError") a RandomErrorServlet nyilvános osztály kiterjeszti a HttpServlet {@Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) {dobjon új IllegalStateException ("véletlenszerű hiba"); }}

3. Alapértelmezett hibakezelés

Telepítsük most egyszerűen az alkalmazást a servlet-tárolóba (feltételezzük, hogy az alkalmazás fut // localhost: 8080 / javax-servlets).

Amikor elérjük a címet // localhost: 8080 / javax-servlets / randomError, látni fogjuk az alapértelmezett szervlet hibakezelést:

Az alapértelmezett hibakezelést a servlet tároló biztosítja, és testreszabható tároló vagy alkalmazás szinten.

4. Egyedi hibakezelés

Az a használatával meghatározhatjuk az egyedi hibakezelést web.xml fájlleíró, amelyben meghatározhatjuk a következő típusú házirendeket:

  • Állapotkód hibakezelés - lehetővé teszi számunkra, hogy a HTTP hibakódokat (kliens és szerver) leképezzük egy statikus HTML hibalehetőségre vagy egy hibakezelő kiszolgálóra
  • Kivétel típusú hibakezelés - lehetővé teszi számunkra, hogy kivétel típusokat statikus HTML hibalapokra vagy hibakezelő kiszolgálóra térképezzünk fel

4.1. Állapotkód hiba HTML-oldal kezelésekor

Beállíthatjuk az egyedi hibakezelési irányelvünket a HTTP 404 hibákra a web.xml:

  404 /error-404.html 

Most pedig hozzáférjen //localhost:8080/javax-servlets/invalid.html a böngészőből - a statikus HTML hibaoldal elérése.

4.2. Kivétel típusa hiba kiszolgálásával

Beállíthatjuk az egyedi hibakezelési irányelvünket java.lang.Kivétel ban ben web.xml:

  java.lang.Exception / errorHandler 

Ban ben ErrorHandlerServlet, hozzáférhetünk a hiba részleteihez a kérelemben megadott hibaattribútumok segítségével:

@WebServlet (urlPatterns = "/ errorHandler") nyilvános osztály ErrorHandlerServlet kiterjeszti a HttpServlet {@Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) dobja az IOException {resp.setContentTypt = = text; "text próbáld meg (PrintWriter író = ill.getWriter ()) {író.write ("Hibaleírás"); író.írja ("

Hiba leírása

"); író.írja ("
    "); Arrays.asList (ERROR_STATUS_CODE, ERROR_EXCEPTION_TYPE, ERROR_MESSAGE) .forEach (e -> író.írja ("
  • "+ e +": "+ req.getAttribute (e) +"
  • ")); író.írja ("
"); író.írja (" ");}}}

Most hozzáférhetünk // localhost: 8080 / javax-servlets / randomError hogy az egyéni hibaszervlet működjön.

jegyzet: Kivételi típusunk, amelyet a web.xml túl széles, és részletesebben meg kell határoznunk az összes kivételt, amelyet kezelni akarunk.

Használhatjuk a konténer által biztosított servlet naplózót is ErrorHandlerServlet komponens a további részletek naplózásához:

Kivétel kivétel = (Kivétel) req.getAttribute (ERROR_EXCEPTION); if (IllegalArgumentException.class.isInstance (kivétel)) {getServletContext () .log ("Hiba egy alkalmazás argumentumában", kivétel); }

Érdemes tudni, mi áll túl a szervlet által biztosított naplózási mechanizmusokon, további részletekért olvassa el az slf4j útmutatót.

5. Következtetés

Ebben a rövid cikkben láthattuk az alapértelmezett hibakezelést és az egyedi hibakezelést egy szervlet alkalmazásban, külső komponensek és könyvtárak hozzáadása nélkül.

Mint mindig, a forráskódot a Servlets oktatótárában találja meg.