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:
- 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
- Opret en controller kaldet ErrorController med en kortlægning / fejl
- 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. Når vi går videre, skaber vi nu vores ErrorController. Vi opretter en enkelt samlende metode, der opfanger fejlen og viser en fejlside: 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: 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: 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'. 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.4. Controlleren
@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
Hjem
6. Testning
@RequestMapping (value = "500Error", method = RequestMethod.GET) public void throwRuntimeException () {throw new NullPointerException ("Throwing a null pointer exception"); }
7. Konklusion