Fejlfinding af Spring MVC 404 "Ingen kortlægning fundet for HTTP-anmodning" Fejl

1. Introduktion

Spring MVC er en traditionel applikation bygget med Front Controller Pattern. DispatcherServlet, som fungerer som frontcontroller, er ansvarlig for routing og anmodning om behandling.

Som med ethvert webapplikation eller websted returnerer Spring MVC HTTP 404-svarskoden, når den anmodede ressource ikke kan findes. I denne vejledning ser vi på almindelige årsager til 404 fejl i Spring MVC.

2. Mulige årsager til 404 svar

2.1. Forkert URI

Lad os sige, at vi har en GreetingController der er kortlagt til /hilsen og gengiver hilsen.jsp:

@Controller public class GreetingController {@RequestMapping (value = "/ greeting", method = RequestMethod.GET) public String get (ModelMap model) {model.addAttribute ("message", "Hello, World!"); returner "hilsen"; }}

Den tilsvarende visning gengiver værdien af besked variabel:

   Hilsen 

$ {besked}

Som forventet at stille en GET-anmodning til /hilsen arbejder:

krølle // localhost: 8080 / hilsen

Vi får vist en HTML-side med meddelelsen "Hello World":

  Hilsen 

Hej Verden!

En af de mest almindelige årsager til at se 404 er at bruge en forkert URI. For eksempel ville det være forkert at stille GET-anmodning til /Vær hilset i stedet for /hilsen:

krølle // localhost: 8080 / hilsner

I et sådant tilfælde vil vi se en advarselsmeddelelse i serverlogfiler:

[http-nio-8080-exec-6] WARN o.s.web.servlet.PageNotFound - Ingen kortlægning fundet til HTTP-anmodning med URI [/ hilsener] i DispatcherServlet med navnet 'mvc'

Og klienten kunne se en fejlside:

  Hjem 

For at undgå dette skal vi sørge for, at vi har indtastet URI korrekt.

2.2. Forkert Servlet-kortlægning

Som forklaret tidligere, DispatcherServlet er den forreste controller i Spring MVC. Derfor skal vi, ligesom i en standard servletbaseret applikation, oprette en kortlægning for servlet ved hjælp af web.xml fil.

Vi definerer servlet inde i servlet tag og kortlæg det til en URI inde i servlet-kortlægning tag. Vi er nødt til at sikre, at værdien af url-mønster er korrekt, fordi det er ret almindeligt at se forslag hvor servlet er tilknyttet “/ *” - bemærk den bageste stjerne:

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

Nu, hvis vi beder om det /hilsen, vi ser en advarsel i serverlogfiler:

krølle // localhost: 8080 / hilsen
WARN o.s.web.servlet.PageNotFound - Ingen kortlægning fundet for HTTP-anmodning med URI [/WEB-INF/view/greeting.jsp] i DispatcherServlet med navnet 'mvc'

Denne gang angiver fejlen det hilsen.jsp findes ikke, og brugeren ser en tom side.

For at rette fejlen skal vi kortlægge DispatcherServlet til “/” (uden den bageste stjerne) i stedet:

 mvc / 

Efter rettelse af kortlægningen skal alt fungere korrekt. Anmodende /hilsen viser nu meddelelsen “Hej, Verden!”:

krølle // localhost: 8080 / hilsen
  Hilsen 

Hej Verden!

Begrundelsen bag problemet er, at hvis vi kortlægger DispatcherServlet til /*, så fortæller vi ansøgningen, at hver eneste anmodning, der ankommer til vores ansøgning, skal betjenes af DispatcherServlet. Det er dog ikke en korrekt tilgang, fordi DispatcherServlet er ikke i stand til at gøre dette. I stedet forventer Spring MVC en implementering af ViewResolver til at vise visninger såsom JSP-filer.

3. Konklusion

I denne hurtige artikel forklarede vi, hvordan man fejler 404-fejl i Spring MVC. Vi gennemgik de to mest almindelige grunde til at modtage et 404-svar fra vores forårsprogram. Den første brugte en forkert URI under anmodningen. Den anden var kortlægning af DispatcherServlet til det forkerte url-mønster i web.xml.

Som altid kan den fulde implementering af denne vejledning findes på Github.