Quantcast
Channel: Baeldung
Viewing all articles
Browse latest Browse all 4535

Debugging the Spring MVC 404 “No mapping found for HTTP request” Error

$
0
0

1. Introduction

Spring MVC is a traditional application built using the Front Controller Pattern. DispatcherServlet, which acts as the front controller, is responsible for routing and request processing.

As with any web application or website, Spring MVC returns the HTTP 404 response code when the requested resource can't be found. In this tutorial, we'll look at common causes for 404 errors in Spring MVC.

2. Possible Causes for 404 Response

2.1. Wrong URI

Let's say we have a GreetingController that is mapped to /greeting and renders greeting.jsp:

The corresponding view renders the value of the message variable:

As expected, making a GET request to /greeting works:

We'll see an HTML page with the message “Hello World”:

One of the most common reasons for seeing 404 is using an incorrect URI. For example, it would be wrong to make GET request to /greetings instead of /greeting:

In such a case, we'd see a warning message in the server logs:

And the client would see an error page:

To avoid this, we need to make sure that we have entered the URI correctly.

2.2. Incorrect Servlet Mapping

As explained earlier, DispatcherServlet is the front controller in Spring MVC. Hence, just as in a standard servlet-based application, we need to create a mapping for the servlet using the web.xml file.

We define the servlet inside the servlet tag and map it to a URI inside the servlet-mapping tag. We need to ensure that the value of url-pattern is correct because it's quite common to see suggestions where the servlet is mapped to “/*” — note the trailing asterisk:

Now, if we request /greeting, we'd see a warning in the server logs:

This time the error states that greeting.jsp is not found, and the user sees a blank page.

To fix the error, we need to map DispatcherServlet to “/” (without the trailing asterisk) instead:

After fixing the mapping, everything should work correctly. Requesting /greeting now shows the message “Hello, World!”.
The reasoning behind the problem is that if we map DispatcherServlet to /*, then we are telling the application that every single request arriving at our application is to be served by DispatcherServlet. However, that's not a correct approach because DispatcherServlet is not capable of doing this. Instead, Spring MVC expects an implementation of ViewResolver to serve views such as JSP files.

3. Conclusion

In this quick article, we explained how to debug 404 errors in Spring MVC. We went through the two most common reasons for receiving a 404 response from our Spring application. The first was using an incorrect URI while making the request. The second was mapping the DispatcherServlet to the wrong url-pattern in web.xml.

As always, the full implementation of this tutorial can be found over on Github.


Viewing all articles
Browse latest Browse all 4535

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>