Jakarta EE Servlet Undtagelse Håndtering
1. Introduktion
I denne vejledning skal vi håndtere undtagelser i en Jakarta EE Servlet-applikation - for at give et yndefuldt og forventet resultat, når der opstår en fejl.
2. Undtagelser fra Jakarta EE Servlet
Først definerer vi en Servlet ved hjælp af API-kommentarerne (se Servlets Intro for flere detaljer) med en standard FÅ processor, der kaster en undtagelse:
@WebServlet (urlPatterns = "/ randomError") offentlig klasse RandomErrorServlet udvider HttpServlet {@Override beskyttet ugyldigt doGet (HttpServletRequest req, HttpServletResponse resp) {kast nyt IllegalStateException ("Tilfældig fejl"); }}
3. Standardfejlhåndtering
Lad os nu blot implementere applikationen i vores servletcontainer (vi antager, at applikationen kører under // localhost: 8080 / javax-servlets).
Når vi får adgang til adressen // localhost: 8080 / javax-servlets / randomError, vi ser standard servlet fejlhåndtering på plads:
Standardfejlhåndtering leveres af servletbeholderen og kan tilpasses på et container- eller applikationsniveau.
4. Brugerdefineret fejlhåndtering
Vi kan definere brugerdefineret fejlhåndtering ved hjælp af en web.xml filbeskrivelse, hvor vi kan definere følgende typer politikker:
- Statuskodefejlhåndtering - det giver os mulighed for at kortlægge HTTP-fejlkoder (klient og server) til en statisk HTML-fejlside eller en fejlhåndteringsservlet
- Undtagelse type fejlhåndtering - det giver os mulighed for at kortlægge undtagelsestyper til statiske HTML-fejlsider eller en fejlhåndteringsservlet
4.1. Statuskodefejlhåndtering med en HTML-side
Vi kan konfigurere vores brugerdefinerede fejlhåndteringspolitik for HTTP 404-fejl i web.xml:
404 / fejl-404.html
Nu, adgang //localhost:8080/javax-servlets/invalid.html fra browseren - for at få den statiske HTML-fejlside.
4.2. Undtagelse Type Fejlhåndtering med en Servlet
Vi kan oprette vores brugerdefinerede fejlhåndteringspolitik for java.lang.Undtagelse i web.xml:
java.lang.Exception / errorHandler
I ErrorHandlerServlet, kan vi få adgang til fejloplysningerne ved hjælp af fejlattributterne i anmodningen:
@WebServlet (urlPatterns = "/ errorHandler") offentlig klasse ErrorHandlerServlet udvider HttpServlet {@ Override beskyttet ugyldigt doGet (HttpServletRequest req, HttpServletResponse resp) kaster IOException {resp.setContentType ("text / html; prøv (PrintWriter-skribent = resp.getWriter ()) {writer.write ("Fejlbeskrivelse"); writer.write ("Fejlbeskrivelse
"); writer.write (""); Arrays.asList (ERROR_STATUS_CODE, ERROR_EXCEPTION_TYPE, ERROR_MESSAGE) .forEach (e -> writer.write ("- "+ e +": "+ req.getAttribute (e) +"
")); writer.write ("
"); writer.write (" ");}}}
Nu kan vi få adgang // localhost: 8080 / javax-servlets / randomError for at se den tilpassede fejlservlet fungerer.
Bemærk: Vores undtagelsestype defineret i web.xml er for bredt, og vi bør specificere alle de undtagelser, vi ønsker at håndtere mere detaljeret.
Vi kan også bruge den container-leverede servlet-logger i vores ErrorHandlerServlet komponent til at logge yderligere detaljer:
Undtagelsesundtagelse = (Undtagelse) req.getAttribute (ERROR_EXCEPTION); hvis (IllegalArgumentException.class.isInstance (undtagelse)) {getServletContext () .log ("Fejl i et applikationsargument", undtagelse); }
Det er værd at vide, hvad der ligger ud over de servlet-leverede logningsmekanismer, se guiden på slf4j for flere detaljer.
5. Konklusion
I denne korte artikel har vi set standardfejlhåndtering og specificeret brugerdefineret fejlhåndtering i en servletapplikation uden at tilføje eksterne komponenter eller biblioteker.
Som altid kan du finde kildekoden på Servlets tutorial repository.