A Spring MVC 404 hibakeresése: „A HTTP-kéréshez nem található leképezés” hiba
1. Bemutatkozás
A Spring MVC egy hagyományos alkalmazás, amely az elülső vezérlő mintájával készült. DispatcherServlet, amely elülső vezérlőként működik, felelős az útválasztásért és a kérelmek feldolgozásáért.
Mint minden webalkalmazáshoz vagy webhelyhez, a Spring MVC is visszaadja a HTTP 404 válaszkódot, ha a kért erőforrás nem található. Ebben az oktatóanyagban megnézzük 404 hiba gyakori okai a tavaszi MVC-ben.
2. A 404 válasz lehetséges okai
2.1. Helytelen URI
Tegyük fel, hogy van egy GreetingController hogy fel van térképezve /üdvözlet és renderel üdvözlet.jsp:
@Controller public class GreetingController {@RequestMapping (value = "/ greeting", method = RequestMethod.GET) public String get (ModelMap model) {model.addAttribute ("message", "Hello, World!"); visszatérő "üdvözlet"; }}
A megfelelő nézet megjeleníti a üzenet változó:
Üdvözlet $ {message}
A várakozásoknak megfelelően GET kérés benyújtása a következő címre: /üdvözlet művek:
curl // localhost: 8080 / üdvözlet
Meglátunk egy HTML oldalt a „Hello World” üzenettel:
Üdvözlet Helló Világ!
A 404 megtekintésének egyik leggyakoribb oka a helytelen URI használata. Például helytelen lenne GET-kérelmet benyújtani / üdvözlet ahelyett /üdvözlet:
curl // localhost: 8080 / üdvözlet
Ilyen esetben figyelmeztető üzenetet látunk a kiszolgáló naplóiban:
[http-nio-8080-exec-6] FIGYELMEZTETÉS o.s.web.servlet.PageNotFound - Nem található leképezés az HTTP-kérelemhez URI-val [/ üdvözlet] az „mvc” nevű DispatcherServlet-ben.
És az ügyfél egy hibaoldalt fog látni:
itthon
Ennek elkerülése érdekében meg kell győződnünk arról, hogy helyesen adtuk-e meg az URI-t.
2.2. Helytelen Servlet leképezés
Mint korábban kifejtettük, DispatcherServlet a Spring MVC első vezérlője. Ezért, ugyanúgy, mint egy standard szervlet alapú alkalmazásban, a servlet használatával is létre kell hoznunk egy leképezést a web.xml fájl.
Meghatározzuk a szervletet a servlet címkével és hozzárendelni egy URI-hez a servlet feltérképezése címke. Biztosítanunk kell, hogy a URL-minta helyes, mert elég gyakran látni javaslatokat ahol a szervlet „/ *” -ra van leképezve - vegye figyelembe a záró csillagot:
mvc org.springframework.web.servlet.DispatcherServlet 1 mvc / *
Most, ha kérjük /üdvözlet, figyelmeztetést látunk a kiszolgáló naplóiban:
curl // localhost: 8080 / üdvözlet
FIGYELMEZTETÉS o.s.web.servlet.PageNotFound - Nem található leképezés a HTTP-kérelemhez az URI [/WEB-INF/view/greeting.jsp] segítségével az „mvc” nevű DispatcherServlet-ben.
Ezúttal a hiba azt állítja üdvözlet.jsp nem található, és a felhasználó üres oldalt lát.
A hiba kijavításához feltérképeznünk kell DispatcherServlet helyett “/” (a záró csillag nélkül):
mvc /
A leképezés kijavítása után mindennek megfelelően kell működnie. Kérés /üdvözlet most a „Helló, világ!” üzenet jelenik meg:
curl // localhost: 8080 / üdvözlet
Üdvözlet Helló Világ!
A probléma oka az, hogy ha feltérképezzük DispatcherServlet nak nek /*, akkor azt mondjuk az alkalmazásnak, hogy a kérelmünkhöz érkező minden egyes kérelmet ki kell szolgálni DispatcherServlet. Ez azonban nem helyes megközelítés, mert DispatcherServlet nem képes erre. Ehelyett a Spring MVC a ViewResolver olyan nézetek kiszolgálására, mint a JSP fájlok.
3. Következtetés
Ebben a rövid cikkben elmagyaráztuk, hogyan lehet 404 hibát hibakeresni a Spring MVC-ben. Átéltük a két leggyakoribb okot, amelyek miatt 404-es választ kaptunk tavaszi pályázatunkból. Az első helytelen URI-t használt a kérés benyújtása közben. A második a DispatcherServlet rosszra URL-minta ban ben web.xml.
Mint mindig, ennek az oktatóanyagnak a teljes megvalósítása megtalálható a Github oldalon.