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:
- 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
- Hozzon létre egy nevű vezérlőt ErrorController feltérképezéssel / hibák
- 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. 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: 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: 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: 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ó. 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.4. A vezérlő
@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
itthon
6. Tesztelés
@RequestMapping (value = "500Error", method = RequestMethod.GET) public void dobRuntimeException () {dobjon új NullPointerException-t ("Null mutató kivétel dobása"); }
7. Következtetés