Egyedi hibalapok rugós MVC-vel

1. Áttekintés

Bármely webalkalmazásban általános követelmény a testreszabott hibaoldalak.

Tegyük fel például, hogy vanília Spring MVC alkalmazást futtat a Tomcat tetején. A felhasználó érvénytelen URL-t ír be a böngészőjébe, és egy nem annyira felhasználóbarát kék-fehér verem nyomot mutat - ez nem ideális.

Ebben az oktatóanyagban testreszabott hibaoldalakat állítunk be néhány HTTP hibakódhoz.

A működési feltételezés az, hogy az olvasó eléggé jól dolgozik a Spring MVC-vel; ha nem, ez nagyszerű módja a kezdésnek.

Ez a cikk a Spring MVC-re összpontosít. A Whitelabel Error Page testreszabása című cikkünk leírja, hogyan hozhat létre egyéni hibaoldalt a Spring Boot alkalmazásban.

2. Az egyszerű lépések

Kezdjük az egyszerű lépésekkel, amelyeket itt követni fogunk:

  1. Adjon meg egyetlen URL-t / hibák ban ben web.xml amely hozzárendel egy olyan módszert, amely kezelni fogja a hibát, amikor hiba keletkezik
  2. Hozzon létre egy nevű vezérlőt ErrorController feltérképezéssel / hibák
  3. Találja ki a HTTP hibakódot futás közben, és jelenítsen meg egy üzenetet a HTTP hibakódnak megfelelően. Például, ha 404-es hiba keletkezik, akkor a felhasználónak látnia kell egy hasonló üzenetet „Az erőforrás nem található”, míg 500-as hiba esetén a felhasználónak látnia kell valamit a 'Sajnálom! Belső szerverhiba keletkezett a végén "

3. Az web.xml

Kezdjük azzal, hogy a következő sorokat adjuk a sorunkhoz web.xml:

 / hibák 

Vegye figyelembe, hogy ez a szolgáltatás csak a 3.0-nál nagyobb Servlet-verziókban érhető el.

Az alkalmazásban generált hibák HTTP hibakódhoz vannak társítva. Tegyük fel például, hogy a felhasználó megad egy URL-t /érvénytelen URL a böngészőbe, de nincs ilyen RequestMapping tavasz belsejében került meghatározásra. Ezután egy 404-es HTTP-kódot generál az alapul szolgáló webszerver. Azok a sorok, amelyeket most adtunk hozzá web.xml utasítja Springet, hogy hajtsa végre az URL-hez leképezett módszerrel írt logikát / hibák.

Itt egy gyors mellékjegyzés - a megfelelő Java Servlet konfigurációnak sajnos nincs API-ja a hibaoldal beállításához - ezért ebben az esetben valóban szükségünk van a web.xml.

4. A vezérlő

Továbbhaladva most megalkotjuk a sajátunkat ErrorController. Létrehozunk egy egységesítő módszert, amely elfogja a hibát és megjeleníti a hiba oldalt:

@Controller public class ErrorController {@RequestMapping (value = "hibák", method = RequestMethod.GET) public ModelAndView renderErrorPage (HttpServletRequest httpRequest) {ModelAndView errorPage = új ModelAndView ("errorPage"); String errorMsg = ""; int httpErrorCode = getErrorCode (httpRequest); switch (httpErrorCode) {eset 400: {errorMsg = "Http hibakód: 400. Rossz kérés"; szünet; } 401. eset: {errorMsg = "Http hibakód: 401. Jogosulatlan"; szünet; } 404. eset: {errorMsg = "Http hibakód: 404. Az erőforrás nem található"; szünet; } 500. eset: {errorMsg = "Http hibakód: 500. Belső szerver hiba"; szünet; }} errorPage.addObject ("errorMsg", errorMsg); return errorPage; } private int getErrorCode (HttpServletRequest httpRequest) {return (Integer) httpRequest .getAttribute ("javax.servlet.error.status_code"); }} 

5. A front-end

Bemutató célokra a hibalehető oldalunkat nagyon egyszerűen és kompaktan fogjuk tartani. Ez az oldal csak egy fehér képernyőn megjelenő üzenetet tartalmaz. Hozzon létre egy jsp nevű fájl errorPage.jsp:

    itthon 

6. Tesztelés

Két alkalmazáson belül előforduló leggyakoribb hibát fogunk szimulálni: a HTTP 404 hibát és a HTTP 500 hibát.

Futtassa a szervert, és menjen tovább localhost: 8080 / spring-mvc-xml / érvénytelenUrl.Mivel ez az URL nem létezik, várhatóan megjelenik a hibaüzenetHttp hibakód: 404. Az erőforrás nem található ”.

Lássuk, mi történik, amikor az egyik kezelő módszer a-t dobja NullPointerException. A következő metódust adjuk hozzá ErrorController:

@RequestMapping (value = "500Error", method = RequestMethod.GET) public void dobRuntimeException () {dobjon új NullPointerException-t ("Null mutató kivétel dobása"); }

Menj át localhost: 8080 / spring-mvc-xml / 500Error. Látnia kell egy fehér képernyőt, amelyen a „Http hibakód: 500. belső szerver hiba” üzenet látható.

7. Következtetés

Láttuk, hogyan lehet hibalapokat beállítani a különböző HTTP-kódokhoz a Spring MVC segítségével. Létrehoztunk egy hibaoldalt, ahol a hibaüzenet dinamikusan jelenik meg a HTTP hibakódnak megfelelően.