Jakarta EE Servlet Unntakshåndtering
1. Introduksjon
I denne opplæringen skal vi håndtere unntak i en Jakarta EE Servlet-applikasjon - for å gi et grasiøst og forventet resultat når en feil oppstår.
2. Unntak fra Jakarta EE Servlet
Først definerer vi en Servlet ved hjelp av API-merknadene (se Servlets Intro for mer informasjon) med en standard FÅ prosessor som vil kaste et unntak:
@WebServlet (urlPatterns = "/ randomError") offentlig klasse RandomErrorServlet utvider HttpServlet {@Override beskyttet ugyldig doGet (HttpServletRequest req, HttpServletResponse resp) {kast ny IllegalStateException ("Tilfeldig feil"); }}
3. Standard feilhåndtering
La oss nå bare distribuere applikasjonen i servletcontaineren vår (vi kommer til å anta at applikasjonen kjører under // localhost: 8080 / javax-servlets).
Når vi får tilgang til adressen // localhost: 8080 / javax-servlets / randomError, vi ser standard servlet feilhåndtering på plass:
Standard feilhåndtering leveres av servletbeholderen og kan tilpasses på container- eller applikasjonsnivå.
4. Tilpasset feilhåndtering
Vi kan definere tilpasset feilhåndtering ved hjelp av a web.xml filbeskrivelse der vi kan definere følgende typer policyer:
- Feilhåndtering av statuskode - det lar oss kartlegge HTTP-feilkoder (klient og server) til en statisk HTML-feilside eller en feilhåndteringsservlet
- Unntakstype feilhåndtering - det lar oss kartlegge unntakstyper til statiske HTML-feilsider eller en feilhåndterings servlet
4.1. Statuskodefeilhåndtering med en HTML-side
Vi kan sette opp vår tilpassede policy for feilhåndtering for HTTP 404-feil i web.xml:
404 / feil-404.html
Nå, tilgang //localhost:8080/javax-servlets/invalid.html fra nettleseren - for å få den statiske HTML-feilsiden.
4.2. Unntakstype Feilhåndtering med Servlet
Vi kan sette opp vår tilpassede policy for feilhåndtering for java.lang. unntak i web.xml:
java.lang.Exception / errorHandler
I ErrorHandlerServlet, kan vi få tilgang til feilinformasjonen ved hjelp av feilattributtene i forespørselen:
@WebServlet (urlPatterns = "/ errorHandler") offentlig klasse ErrorHandlerServlet utvider HttpServlet {@Override beskyttet ugyldig doGet (HttpServletRequest req, HttpServletResponse resp) kaster IOException {resp.setContentType ("text / htf; prøv (PrintWriter-skribent = resp.getWriter ()) {writer.write ("Feilbeskrivelse"); writer.write ("Feilbeskrivelse
"); writer.write (""); Arrays.asList (ERROR_STATUS_CODE, ERROR_EXCEPTION_TYPE, ERROR_MESSAGE) .forEach (e -> writer.write ("- "+ e +": "+ req.getAttribute (e) +"
")); writer.write ("
"); writer.write (" ");}}}
Nå kan vi få tilgang // localhost: 8080 / javax-servlets / randomError for å se den tilpassede feilservleten fungerer.
Merk: Vår unntakstype definert i web.xml er for bredt, og vi bør spesifisere alle unntakene vi ønsker å håndtere mer detaljert.
Vi kan også bruke den medfølgende servletloggeren i vår ErrorHandlerServlet komponent for å logge ytterligere detaljer:
Unntak unntak = (Unntak) req.getAttribute (ERROR_EXCEPTION); hvis (IllegalArgumentException.class.isInstance (unntak)) {getServletContext () .log ("Feil i et applikasjonsargument", unntak); }
Det er verdt å vite hva som er utenfor de servlet-loggede mekanismene, sjekk guiden på slf4j for mer informasjon.
5. Konklusjon
I denne korte artikkelen har vi sett standard feilhåndtering og spesifisert tilpasset feilhåndtering i et servletprogram uten å legge til eksterne komponenter eller biblioteker.
Som alltid kan du finne kildekoden på Servlets tutorial repository.