Aangepaste foutpagina's met Spring MVC

1. Overzicht

Een veel voorkomende vereiste in elke webtoepassing zijn aangepaste foutpagina's.

Stel dat u een vanilla Spring MVC-app gebruikt bovenop Tomcat. Een gebruiker voert een ongeldige URL in zijn browser in en krijgt een niet zo gebruiksvriendelijk blauw-wit stacktracé te zien - niet ideaal.

In deze zelfstudie stellen we aangepaste foutpagina's in voor een paar HTTP-foutcodes.

De werkaanname is dat de lezer redelijk op zijn gemak is bij het werken met Spring MVC; zo niet, dan is dit een geweldige manier om te beginnen.

Dit artikel richt zich op Spring MVC. Ons artikel Witte label foutpagina aanpassen beschrijft hoe u een aangepaste foutpagina kunt maken in Spring Boot.

2. De eenvoudige stappen

Laten we beginnen met de eenvoudige stappen die we hier gaan volgen:

  1. Specificeer een enkele URL / fouten in web.xml dat verwijst naar een methode die de fout zou afhandelen wanneer er een fout wordt gegenereerd
  2. Maak een controller met de naam ErrorController met een mapping / fouten
  3. Zoek de HTTP-foutcode tijdens runtime en geef een bericht weer volgens de HTTP-foutcode. Als er bijvoorbeeld een 404-fout wordt gegenereerd, zou de gebruiker een bericht als 'Bron niet gevonden' , terwijl voor een 500-fout de gebruiker iets zou moeten zien in de trant van 'Sorry! Er is aan onze kant een interne serverfout gegenereerd '

3. Het web.xml

We beginnen met het toevoegen van de volgende regels aan onze web.xml:

 / fouten 

Merk op dat deze functie alleen beschikbaar is in Servlet-versies hoger dan 3.0.

Elke fout die in een app wordt gegenereerd, is gekoppeld aan een HTTP-foutcode. Stel dat een gebruiker een URL invoert /Ongeldige URL in de browser, maar niet zo RequestMapping is gedefinieerd in de lente. Vervolgens wordt een HTTP-code van 404 gegenereerd door de onderliggende webserver. De regels die we zojuist hebben toegevoegd aan onze web.xml vertelt Spring om de logica uit te voeren die is geschreven in de methode die is toegewezen aan de URL / fouten.

Een korte kanttekening hier - de overeenkomstige Java Servlet-configuratie heeft helaas geen API voor het instellen van de foutpagina - dus in dit geval hebben we de web.xml.

4. De verantwoordelijke

Verderop maken we nu onze ErrorController. We creëren een enkele verenigende methode die de fout onderschept en een foutpagina weergeeft:

@Controller openbare klasse ErrorController {@RequestMapping (waarde = "errors", methode = RequestMethod.GET) openbare ModelAndView renderErrorPage (HttpServletRequest httpRequest) {ModelAndView errorPage = nieuw ModelAndView ("errorPage"); String errorMsg = ""; int httpErrorCode = getErrorCode (httpRequest); switch (httpErrorCode) {case 400: {errorMsg = "Http Error Code: 400. Bad Request"; breken; } case 401: {errorMsg = "Http-foutcode: 401. Niet geautoriseerd"; breken; } case 404: {errorMsg = "Http-foutcode: 404. Bron niet gevonden"; breken; } case 500: {errorMsg = "Http-foutcode: 500. Interne serverfout"; breken; }} errorPage.addObject ("errorMsg", errorMsg); return errorPage; } private int getErrorCode (HttpServletRequest httpRequest) {return (geheel getal) httpRequest .getAttribute ("javax.servlet.error.status_code"); }} 

5. De front-end

Voor demonstratiedoeleinden zullen we onze foutpagina heel eenvoudig en compact houden. Deze pagina bevat alleen een bericht dat op een wit scherm wordt weergegeven. Maak een jsp bestand genaamd errorPage.jsp:

    Huis 

6. Testen

We zullen twee van de meest voorkomende fouten simuleren die binnen elke applicatie optreden: de HTTP 404-fout en de HTTP 500-fout.

Start de server en ga verder naar localhost: 8080 / spring-mvc-xml / invalidUrl.Aangezien deze URL niet bestaat, verwachten we onze foutpagina te zien met het bericht ‘Http-foutcode: 404. Bron niet gevonden '.

Laten we eens kijken wat er gebeurt als een van de handler-methoden een NullPointerException. We voegen de volgende methode toe aan Foutcontroller:

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

Overgaan naar localhost: 8080 / spring-mvc-xml / 500 Fout. U zou een wit scherm moeten zien met het bericht ‘Http Error Code: 500. Internal Server Error '.

7. Conclusie

We hebben gezien hoe we foutpagina's kunnen instellen voor verschillende HTTP-codes met Spring MVC. We hebben een enkele foutpagina gemaakt waar een foutmelding dynamisch wordt weergegeven volgens de HTTP-foutcode.