Egendefinerte feilsider med Spring MVC

1. Oversikt

Et vanlig krav i alle webapplikasjoner er tilpassede feilsider.

Anta for eksempel at du kjører en vanilje Spring MVC-app på toppen av Tomcat. En bruker angir en ugyldig URL i nettleseren sin og vises med et ikke så brukervennlig blå og hvitt stakkspor - ikke ideelt.

I denne opplæringen vil vi sette opp tilpassede feilsider for noen få HTTP-feilkoder.

Arbeidsforutsetningen er at leseren er ganske komfortabel med å jobbe med Spring MVC; hvis ikke, er dette en fin måte å starte.

Denne artikkelen fokuserer på Spring MVC. Vår artikkel Tilpass Whitelabel Error Page beskriver hvordan du oppretter en tilpasset feilside i Spring Boot.

2. De enkle trinnene

La oss starte med de enkle trinnene vi skal følge her:

  1. Spesifiser en enkelt URL / feil i web.xml som tilordnes til en metode som vil håndtere feilen når en feil genereres
  2. Lag en kontroller som heter ErrorController med en kartlegging / feil
  3. Finn ut HTTP-feilkoden ved kjøretid, og vis en melding i henhold til HTTP-feilkoden. For eksempel, hvis en 404-feil genereres, bør brukeren se en melding som ‘Ressurs ikke funnet’, mens for en 500-feil, bør brukeren se noe på linjen 'Beklager! En intern serverfeil ble generert på slutten '

3. Den web.xml

Vi begynner med å legge til følgende linjer i vår web.xml:

 / feil 

Merk at denne funksjonen bare er tilgjengelig i Servlet-versjoner som er større enn 3.0.

Enhver feil generert i en app er tilknyttet en HTTP-feilkode. Anta for eksempel at en bruker skriver inn en URL /ugyldig URL inn i nettleseren, men ingen slike RequestMapping har blitt definert inne på våren. Deretter en HTTP-kode på 404 generert av den underliggende webserveren. Linjene vi nettopp har lagt til web.xml forteller Spring om å utføre logikken som er skrevet i metoden som er kartlagt til URL-en / feil.

En rask sidemerknad her - den korresponderende Java Servlet-konfigurasjonen har dessverre ikke et API for å angi feilsiden - så i dette tilfellet trenger vi faktisk web.xml.

4. Kontrolleren

Når vi fortsetter, lager vi nå vårt ErrorController. Vi lager en enkelt samlende metode som avlytter feilen og viser en feilside:

@Controller offentlig klasse ErrorController {@RequestMapping (verdi = "feil", 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"; gå i stykker; } sak 401: {errorMsg = "Http feilkode: 401. Uautorisert"; gå i stykker; } case 404: {errorMsg = "Http feilkode: 404. Ressurs ikke funnet"; gå i stykker; } sak 500: {errorMsg = "Http feilkode: 500. Intern serverfeil"; gå i stykker; }} errorPage.addObject ("errorMsg", errorMsg); return errorPage; } private int getErrorCode (HttpServletRequest httpRequest) {return (Integer) httpRequest .getAttribute ("javax.servlet.error.status_code"); }} 

5. Frontend

For demonstrasjonsformål vil vi holde feilsiden vår veldig enkel og kompakt. Denne siden inneholder bare en melding som vises på en hvit skjerm. Lage en jsp fil kalt errorPage.jsp:

    Hjem 

6. Testing

Vi vil simulere to av de vanligste feilene som oppstår i et hvilket som helst program: HTTP 404-feilen og HTTP 500-feilen.

Kjør serveren og gå videre til localhost: 8080 / spring-mvc-xml / invalidUrl.Siden denne nettadressen ikke eksisterer, forventer vi å se feilsiden vår med meldingen ‘Http feilkode: 404. Ressurs ikke funnet '.

La oss se hva som skjer når en av behandlingsmetodene kaster a NullPointerException. Vi legger til 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 hvit skjerm med meldingen 'Http Error Code: 500. Internal Server Error'.

7. Konklusjon

Vi så hvordan du setter opp feilsider for forskjellige HTTP-koder med Spring MVC. Vi opprettet en enkelt feilside der en feilmelding vises dynamisk i henhold til HTTP-feilkoden.