Brugerdefinerede fejlsider med Spring MVC

1. Oversigt

Et almindeligt krav i enhver webapplikation er tilpassede fejlsider.

Antag for eksempel, at du kører en vaniljefjeder MVC-app oven på Tomcat. En bruger indtaster en ugyldig URL i sin browser og får vist en ikke så brugervenlig blå og hvid staksporing - ikke ideel.

I denne vejledning opretter vi tilpassede fejlsider til et par HTTP-fejlkoder.

Arbejdsantagelsen er, at læseren er temmelig komfortabel med at arbejde med Spring MVC; hvis ikke, er dette en god måde at starte på.

Denne artikel fokuserer på Spring MVC. Vores artikel Tilpas whitelabel-fejlside beskriver, hvordan du opretter en brugerdefineret fejlside i Spring Boot.

2. De enkle trin

Lad os starte med de enkle trin, vi skal følge her:

  1. Angiv en enkelt URL / fejl i web.xml der kortlægges til en metode, der kan håndtere fejlen, når der genereres en fejl
  2. Opret en controller kaldet ErrorController med en kortlægning / fejl
  3. Find ud af HTTP-fejlkoden ved kørsel, og vis en meddelelse i henhold til HTTP-fejlkoden. For eksempel, hvis der genereres en 404-fejl, skal brugeren se en besked som 'Ressource ikke fundet', der henviser til, at for en 500-fejl, skal brugeren se noget på linjen 'Undskyld! En intern serverfejl blev genereret i vores ende '

3. Den web.xml

Vi starter med at tilføje følgende linjer til vores web.xml:

 / fejl 

Bemærk, at denne funktion kun er tilgængelig i Servlet-versioner, der er større end 3.0.

Enhver fejl genereret i en app er knyttet til en HTTP-fejlkode. Antag for eksempel, at en bruger indtaster en URL /ugyldig URL ind i browseren, men ikke sådan RequestMapping er defineret inde i foråret. Derefter genereres en HTTP-kode på 404 af den underliggende webserver. De linjer, vi lige har tilføjet til vores web.xml beder Spring om at udføre den logik, der er skrevet i metoden, der er tilknyttet URL'en / fejl.

En hurtig side-note her - den tilsvarende Java Servlet-konfiguration har desværre ikke en API til indstilling af fejlsiden - så i dette tilfælde har vi faktisk brug for web.xml.

4. Controlleren

Når vi går videre, skaber vi nu vores ErrorController. Vi opretter en enkelt samlende metode, der opfanger fejlen og viser en fejlside:

@Controller offentlig klasse ErrorController {@RequestMapping (værdi = "fejl", metode = RequestMethod.GET) offentlig ModelAndView renderErrorPage (HttpServletRequest httpRequest) {ModelAndView errorPage = ny ModelAndView ("errorPage"); String errorMsg = ""; int httpErrorCode = getErrorCode (httpRequest); switch (httpErrorCode) {case 400: {errorMsg = "Http Error Code: 400. Bad Request"; pause; } sag 401: {errorMsg = "HTTP-fejlkode: 401. Uautoriseret"; pause; } sag 404: {errorMsg = "Http fejlkode: 404. Ressource ikke fundet"; pause; } sag 500: {errorMsg = "HTTP-fejlkode: 500. Intern serverfejl"; pause; }} errorPage.addObject ("errorMsg", errorMsg); return errorPage; } privat int getErrorCode (HttpServletRequest httpRequest) {return (Integer) httpRequest .getAttribute ("javax.servlet.error.status_code"); }} 

5. Frontend

Til demonstrationsformål holder vi vores fejlside meget enkel og kompakt. Denne side indeholder kun en besked, der vises på en hvid skærm. Lave en jsp fil kaldet errorPage.jsp:

    Hjem 

6. Testning

Vi simulerer to af de mest almindelige fejl, der opstår i enhver applikation: HTTP 404-fejlen og HTTP 500-fejlen.

Kør serveren og gå videre til localhost: 8080 / spring-mvc-xml / invalidUrl.Da denne URL ikke findes, forventer vi at se vores fejlside med meddelelsen 'HTTP-fejlkode: 404. Ressource ikke fundet '.

Lad os se, hvad der sker, når en af ​​behandlingsmetoderne kaster et NullPointerException. Vi tilføjer følgende metode til ErrorController:

@RequestMapping (value = "500Error", method = RequestMethod.GET) public void throwRuntimeException () {throw new NullPointerException ("Throwing a null pointer exception"); }

Gå over til localhost: 8080 / spring-mvc-xml / 500Error. Du skal se en hvid skærm med meddelelsen 'Http Error Code: 500. Internal Server Error'.

7. Konklusion

Vi så, hvordan man opretter fejlsider til forskellige HTTP-koder med Spring MVC. Vi oprettede en enkelt fejlside, hvor en fejlmeddelelse vises dynamisk i henhold til HTTP-fejlkoden.


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