Afhandeling van uitzonderingen op Jakarta EE-servlet

1. Inleiding

In deze tutorial gaan we uitzonderingen behandelen in een Jakarta EE Servlet-applicatie - om een ​​gracieus en verwacht resultaat te bieden wanneer er een fout optreedt.

2. Uitzonderingen Jakarta EE Servlet

Eerst definiëren we een Servlet met behulp van de API-annotaties (bekijk de Servlets-intro voor meer details) met een standaard KRIJGEN processor die een uitzondering genereert:

@WebServlet (urlPatterns = "/ randomError") openbare klasse RandomErrorServlet breidt HttpServlet uit {@Override beschermde ongeldige doGet (HttpServletRequest req, HttpServletResponse resp) {throw new IllegalStateException ("Random error"); }}

3. Standaard foutafhandeling

Laten we nu gewoon de applicatie in onze servlet-container implementeren (we gaan ervan uit dat de applicatie draait onder // localhost: 8080 / javax-servlets).

Wanneer we toegang hebben tot het adres // localhost: 8080 / javax-servlets / randomError, we zullen de standaard servlet-foutafhandeling op zijn plaats zien:

Standaard foutafhandeling wordt geleverd door de servlet-container en kan worden aangepast op container- of toepassingsniveau.

4. Aangepaste foutafhandeling

We kunnen aangepaste foutafhandeling definiëren met behulp van een web.xml bestandsdescriptor waarin we de volgende soorten beleid kunnen definiëren:

  • Statuscode foutafhandeling - het stelt ons in staat om HTTP-foutcodes (client en server) toe te wijzen aan een statische HTML-foutpagina of een servlet voor foutafhandeling
  • Foutafhandeling van het type uitzondering - het stelt ons in staat uitzonderingstypes toe te wijzen aan statische HTML-foutpagina's of een servlet voor foutafhandeling

4.1. Statuscodefoutafhandeling met een HTML-pagina

We kunnen ons aangepaste foutafhandelingsbeleid instellen voor HTTP 404-fouten in het web.xml:

  404 /fout-404.html 

Nu toegang //localhost:8080/javax-servlets/invalid.html vanuit de browser - om de statische HTML-foutpagina op te halen.

4.2. Uitzonderingstype Foutafhandeling met een servlet

We kunnen ons aangepaste foutafhandelingsbeleid instellen voor java.lang.Exception in web.xml:

  java.lang.Exception / errorHandler 

In ErrorHandlerServlet, hebben we toegang tot de foutdetails met behulp van de foutattributen die in het verzoek worden verstrekt:

@WebServlet (urlPatterns = "/ errorHandler") publieke klasse ErrorHandlerServlet breidt HttpServlet uit {@Override beschermde leegte doGet (HttpServletRequest req, HttpServletResponse resp) gooit IOException {resp.setContentType ("text" / html; probeer (PrintWriter writer = resp.getWriter ()) {writer.write ("Foutbeschrijving"); writer.write ("

Foutbeschrijving

"); 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 hebben we toegang // localhost: 8080 / javax-servlets / randomError om de aangepaste foutservlet te zien werken.

Opmerking: Ons uitzonderingstype gedefinieerd in het web.xml is te breed en we moeten alle uitzonderingen specificeren die we in meer detail willen behandelen.

We kunnen ook de door een container geleverde servlet-logger gebruiken in onze ErrorHandlerServlet component om aanvullende details te loggen:

Uitzonderingsuitzondering = (Uitzondering) req.getAttribute (ERROR_EXCEPTION); if (IllegalArgumentException.class.isInstance (uitzondering)) {getServletContext () .log ("Fout bij een toepassingsargument", uitzondering); }

Het is de moeite waard om te weten wat er verder gaat dan de door servlet geleverde logboekregistratiemechanismen, raadpleeg de handleiding op slf4j voor meer details.

5. Conclusie

In dit korte artikel hebben we standaard foutafhandeling en gespecificeerde aangepaste foutafhandeling in een servlettoepassing gezien zonder externe componenten of bibliotheken toe te voegen.

Zoals altijd kun je de broncode vinden in de Servlets-zelfstudierepository.


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