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 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.


$config[zx-auto] not found$config[zx-overlay] not found