No mapping found for HTTP request with URI Spring MVC

java, model-view-controller, spring, spring-mvc

Solution

With the web.xml configured they way you have in the question, in particular:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

ALL requests being made to your web app will be directed to the `DispatcherServlet`. This includes requests like `/tasklist/`, `/tasklist/some-thing.html`, `/tasklist/WEB-INF/views/index.jsp`.

Because of this, when your controller returns a view that points to a `.jsp`, instead of allowing your server container to service the request, the `DispatcherServlet` jumps in and starts looking for a controller that can service this request, it doesn't find any and hence the `404`.

The simplest way to solve is to have your servlet url mapping as follows:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Notice the missing `*`. This tells the container that any request that does not have a `path info` in it (urls without a .xxx at the end), should be sent to the `DispatcherServlet`. With this configuration, when a `xxx.jsp` request is received, the `DispatcherServlet` is not consulted, and your servlet container's default servlet will service the request and present the jsp as expected.

Hope this helps, I realize your earlier comments state that the problem has been resolved, but the solution CAN NOT be just adding `method=RequestMethod.GET` to the `RequestMethod`.

Problem

Here's my Web.xml ``` <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/servlet-context.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> ``` my servlet-context.xml ``` <context:component-scan base-package="com.springexample.controller.impl" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> ``` And lastly the Handler class. which is under com.springexample.controller.impl ``` @Controller public class IndexControllerImpl implements IndexController { @RequestMapping("/") public String index() { return "index"; } } ``` However on going to `localhost:8080/projectname/` it returns a 404 error. ``` Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet' Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name ' ``` Here is my project structure

Original source

Related problems