Otklanjanje pogrešaka u pogrešci Spring MVC 404 "Nije pronađeno mapiranje za HTTP zahtjev"

1. Uvod

Spring MVC tradicionalna je aplikacija izgrađena pomoću uzorka prednjeg kontrolera. DispatcherServlet, koji djeluje kao prednji kontrolor, odgovoran je za usmjeravanje i obradu zahtjeva.

Kao i kod bilo koje web aplikacije ili web mjesta, Spring MVC vraća HTTP 404 odgovor kod kada se traženi resurs ne može pronaći. U ovom uputstvu ćemo pogledati uobičajeni uzroci 404 pogreške u Spring MVC-u.

2. Mogući uzroci 404 odgovora

2.1. Pogrešan URI

Recimo da imamo a GreetingController koji se preslikava na /pozdrav i prikazuje pozdrav.jsp:

@Controller javna klasa GreetingController {@RequestMapping (value = "/ pozdrav", method = RequestMethod.GET) public String get (ModelMap model) {model.addAttribute ("message", "Hello, World!"); uzvrati "pozdrav"; }}

Odgovarajući prikaz daje vrijednost poruka varijabla:

   Pozdrav 

$ {message}

Kao što se i očekivalo, podnošenje GET zahtjeva za /pozdrav djela:

uvojak // localhost: 8080 / pozdrav

Vidjet ćemo HTML stranicu s porukom "Hello World":

  Pozdrav 

Pozdrav svijete!

Jedan od najčešćih razloga za vidjeti 404 je upotreba netočnog URI-ja. Na primjer, bilo bi pogrešno podnijeti zahtjev za GET / pozdrav umjesto /pozdrav:

uvojak // localhost: 8080 / pozdrav

U tom bismo slučaju u zapisnicima poslužitelja vidjeli poruku upozorenja:

[http-nio-8080-exec-6] UPOZORENJE o.s.web.servlet.PageNotFound - Nije pronađeno mapiranje za HTTP zahtjev s URI-jem [/ pozdrav] u DispatcherServlet s imenom 'mvc'

I klijent bi vidio stranicu s pogreškom:

  Dom 

Da bismo to izbjegli, moramo biti sigurni da smo ispravno unijeli URI.

2.2. Neispravno mapiranje servleta

Kao što je ranije objašnjeno, DispatcherServlet je prednji kontroler u Spring MVC. Stoga, baš kao u standardnoj aplikaciji koja se temelji na servletima, moramo stvoriti mapiranje za servlet koristeći web.xml datoteka.

Definiramo servlet unutar servlet označite i preslikajte ga na URI unutar mapiranje servleta označiti. Moramo osigurati da vrijednost url-uzorak je točna jer je uobičajeno vidjeti prijedloge gdje je servlet mapiran na “/ *” - imajte na umu zvjezdicu:

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

Ako zatražimo /pozdrav, vidjeli bismo upozorenje u zapisnicima poslužitelja:

uvojak // localhost: 8080 / pozdrav
UPOZORENO o.s.web.servlet.PageNotFound - Nije pronađeno mapiranje za HTTP zahtjev s URI-om [/WEB-INF/view/greeting.jsp] u DispatcherServlet-u s imenom 'mvc'

Ovaj put pogreška navodi da pozdrav.jsp nije pronađena, a korisnik vidi praznu stranicu.

Da bismo ispravili pogrešku, moramo mapirati DispatcherServlet umjesto "/" (bez prateće zvjezdice):

 mvc / 

Nakon popravljanja mapiranja, sve bi trebalo ispravno raditi. Zahtjev /pozdrav sada prikazuje poruku "Hello, World!":

uvojak // localhost: 8080 / pozdrav
  Pozdrav 

Pozdrav svijete!

Razlog problema je ako mapiramo DispatcherServlet do / *, tada govorimo aplikaciji da treba uručiti svaki pojedinačni zahtjev koji stigne u našu aplikaciju DispatcherServlet. Međutim, to nije ispravan pristup jer DispatcherServlet nije sposoban za ovo. Umjesto toga, Spring MVC očekuje implementaciju ViewResolver za posluživanje pogleda poput JSP datoteka.

3. Zaključak

U ovom smo kratkom članku objasnili kako ispraviti pogreške 404 u Spring MVC-u. Prošli smo kroz dva najčešća razloga za primanje odgovora 404 iz naše proljetne prijave. Prvi je koristio netočan URI tijekom podnošenja zahtjeva. Drugi je bio mapiranje DispatcherServlet na pogrešno url-uzorak u web.xml.

Kao i uvijek, cjelovitu implementaciju ovog vodiča možete pronaći na Githubu.