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.