Feilsøking av Spring MVC 404 "Ingen kartlegging funnet for HTTP-forespørsel" Feil

1. Introduksjon

Spring MVC er en tradisjonell applikasjon bygget med Front Controller Pattern. DispatcherServlet, som fungerer som frontkontroller, er ansvarlig for ruting og behandling av forespørsler.

Som med alle webapplikasjoner eller nettsteder, returnerer Spring MVC HTTP 404-responskoden når den forespurte ressursen ikke kan bli funnet. I denne opplæringen vil vi se på vanlige årsaker til 404 feil i Spring MVC.

2. Mulige årsaker til 404 svar

2.1. Feil URI

La oss si at vi har en HilsenKontroller som er kartlagt til /hilsen og gjengir hilsen.jsp:

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

Tilsvarende visning gjengir verdien av beskjed variabel:

   Hilsen 

$ {melding}

Som forventet, gjør en GET-forespørsel til /hilsen virker:

krøll // localhost: 8080 / hilsen

Vi får se en HTML-side med meldingen "Hello World":

  Hilsen 

Hei Verden!

En av de vanligste årsakene til å se 404 er å bruke feil URI. For eksempel ville det være galt å gjøre GET-forespørsel til /hilsener i stedet for /hilsen:

krøll // localhost: 8080 / hilsener

I et slikt tilfelle vil vi se en advarsel i serverloggene:

[http-nio-8080-exec-6] WARN o.s.web.servlet.PageNotFound - Ingen kartlegging funnet for HTTP-forespørsel med URI [/ hilsener] i DispatcherServlet med navnet 'mvc'

Og klienten ville se en feilside:

  Hjem 

For å unngå dette, må vi sørge for at vi har angitt URI riktig.

2.2. Feil servettkartlegging

Som forklart tidligere, DispatcherServlet er frontkontrolleren i Spring MVC. Derfor, akkurat som i en standard servletbasert applikasjon, må vi lage en kartlegging for servleten ved hjelp av web.xml fil.

Vi definerer servletten inne i servlet merke og kartlegge den til en URI inne i servlet-mapping stikkord. Vi må sørge for at verdien av url-mønster er riktig fordi det er ganske vanlig å se forslag der servletten er kartlagt til “/ *” - merk den etterfølgende stjernen:

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

Nå, hvis vi ber om det /hilsen, vi ser en advarsel i serverloggene:

krøll // localhost: 8080 / hilsen
WARN o.s.web.servlet.PageNotFound - Ingen kartlegging funnet for HTTP-forespørsel med URI [/WEB-INF/view/greeting.jsp] i DispatcherServlet med navnet 'mvc'

Denne gangen sier feilen at hilsen.jsp blir ikke funnet, og brukeren ser en tom side.

For å fikse feilen, må vi kartlegge DispatcherServlet til “/” (uten etterfølgende stjerne) i stedet:

 mvc / 

Etter å ha løst kartleggingen, skal alt fungere riktig. Ber om /hilsen viser nå meldingen "Hello, World!":

krøll // localhost: 8080 / hilsen
  Hilsen 

Hei Verden!

Begrunnelsen bak problemet er at hvis vi kartlegger DispatcherServlet til /*, så forteller vi søknaden at hver eneste forespørsel som kommer til søknaden vår skal betjenes av DispatcherServlet. Det er imidlertid ikke en riktig tilnærming fordi DispatcherServlet er ikke i stand til å gjøre dette. I stedet forventer Spring MVC en implementering av ViewResolver for å vise visninger som JSP-filer.

3. Konklusjon

I denne raske artikkelen forklarte vi hvordan feilsøke 404 feil i Spring MVC. Vi gjennomgikk de to vanligste årsakene til å motta et 404-svar fra vår-søknaden. Den første brukte feil URI mens du sendte forespørselen. Den andre var å kartlegge DispatcherServlet til galt url-mønster i web.xml.

Som alltid kan den fulle implementeringen av denne opplæringen finnes på Github.


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