Ladenie pružiny MVC 404 Chyba „Nenašlo sa žiadne mapovanie pre požiadavku HTTP“

1. Úvod

Spring MVC je tradičná aplikácia vytvorená pomocou modelu predného ovládača. DispečerServlet, ktorý funguje ako predný radič, je zodpovedný za smerovanie a spracovanie žiadostí.

Rovnako ako v prípade iných webových aplikácií alebo webových stránok, Spring MVC vráti kód odpovede HTTP 404, keď požadovaný zdroj nemožno nájsť. V tomto návode sa pozrieme na bežné príčiny chýb 404 v Spring MVC.

2. Možné príčiny odpovede 404

2.1. Nesprávne URI

Povedzme, že máme GreetingController ktorý je mapovaný na / pozdrav a vykresľuje pozdrav.jsp:

@Controller verejná trieda GreetingController {@RequestMapping (hodnota = "/ pozdrav", metóda = RequestMethod.GET) verejný reťazec get (ModelMap model) {model.addAttribute ("message", "Hello, World!"); vrátiť "pozdrav"; }}

Zodpovedajúce zobrazenie vykresľuje hodnotu súboru správa premenná:

   Pozdravujem vás 

$ {message}

Podľa očakávania sa podáva žiadosť GET / pozdrav Tvorba:

zvlnenie // localhost: 8080 / pozdrav

Uvidíme stránku HTML so správou „Hello World“:

  Pozdravujem vás 

Ahoj, svet!

Jedným z najbežnejších dôvodov videnia 404 je použitie nesprávneho URI. Bolo by napríklad nesprávne zadať požiadavku GET / pozdravujem namiesto / pozdrav:

zvlnenie // localhost: 8080 / pozdravy

V takom prípade by sme v denníkoch servera videli varovnú správu:

[http-nio-8080-exec-6] WARN o.s.web.servlet.PageNotFound - pre požiadavku HTTP sa nenašlo mapovanie s URI [/ greetings] v DispatcherServlet s názvom „mvc“

A klientovi by sa zobrazila chybová stránka:

  Domov 

Aby sme sa tomu vyhli, musíme sa ubezpečiť, že sme URI zadali správne.

2.2. Nesprávne mapovanie servletu

Ako už bolo vysvetlené, DispatcherServlet je predný ovládač v Spring MVC. Preto, rovnako ako v štandardnej servletovej aplikácii, musíme vytvoriť mapovanie pre servlet pomocou web.xml spis.

Definujeme servlet vo vnútri servlet označte a namapujte na URI vo vnútri súboru mapovanie servletu značka. Musíme zabezpečiť, aby hodnota vzor adresy URL je správne, pretože je dosť bežné vidieť návrhy kde je servlet namapovaný na „/ *“ - všimnite si koncovú hviezdičku:

    mvc org.springframework.web.servlet.DispatcherServlet 1 mvc / * 

Teraz, ak o to požiadame / pozdrav, v protokoloch servera by sme videli varovanie:

zvlnenie // localhost: 8080 / pozdrav
WARN o.s.web.servlet.PageNotFound - Nenašlo sa žiadne mapovanie pre požiadavku HTTP s URI [/WEB-INF/view/greeting.jsp] v DispatcherServlet s názvom „mvc“

Tentokrát chyba tvrdí, že pozdrav.jsp sa nenájde a používateľovi sa zobrazí prázdna stránka.

Aby sme chybu napravili, musíme zmapovať DispatcherServlet namiesto „/“ (bez koncovej hviezdičky):

 MVC / 

Po oprave mapovania by malo všetko fungovať správne. Žiadanie / pozdrav teraz zobrazuje správu „Ahoj, svet!“:

zvlnenie // localhost: 8080 / pozdrav
  Pozdravujem vás 

Ahoj, svet!

Dôvod problému je taký, že ak zmapujeme DispatcherServlet do / *, potom hovoríme aplikácii, že každej žiadosti doručenej k našej žiadosti má byť vyhovené DispatcherServlet. To však nie je správny prístup, pretože DispatcherServlet nie je schopný to urobiť. Namiesto toho Spring MVC očakáva implementáciu ViewResolver na poskytovanie zobrazení, ako sú súbory JSP.

3. Záver

V tomto rýchlom článku sme vysvetlili, ako ladiť chyby 404 v jarnom MVC. Prešli sme si dvoma najbežnejšími dôvodmi, prečo sme dostali odpoveď 404 z našej jarnej aplikácie. Prvý používal pri zadávaní žiadosti nesprávny URI. Druhý mapoval DispatcherServlet k nesprávnemu vzor adresy URL v web.xml.

Úplnú implementáciu tohto tutoriálu nájdete ako vždy na serveri Github.


$config[zx-auto] not found$config[zx-overlay] not found