No mapping found for HTTP request with URI Spring MVC
Solution 1
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
.
Solution 2
I have the same problem....
I change my project name and i have this problem...my solution was the checking project refences and use /
in my web.xml (instead of /*
)
Solution 3
Try passing the Model object in your index method and it will work-
@RequestMapping("/")
public String index(org.springframework.ui.Model model) {
return "index";
}
Actually the spring container looks for a Model object in the mapping method. If it finds the same it will pass the returning String as view to the View resolver.
Hope this helps.
Solution 4
First check whether the java classes are compiled or not in your [PROJECT_NAME]\target\classes directory.
If not you have some compilation errors in your java classes.
Related videos on Youtube
user962206
Updated on October 10, 2020Comments
-
user962206 over 3 years
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
-
Bart almost 11 years@donatello Like GET and POST are the only two request methods available ;) It shouldn't matter really. Leaving out the RequestMethod argument means it will take all of them (GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE).
-
-
dnang over 10 yearsI think Spring's documentation is partly responsible for this confusion. They use this web.xml piece
<servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/example/*</url-pattern> </servlet-mapping>
as an example, without any warning that the resolved views might go back to the dispatcher again if servlet mapping is not carefully configured. Most people would just remove theexample
part and that's how they got this strange problem. -
thekosmix over 10 yearsalthough it's not necessary that compiled classes should be there in target folder (unless you are using maven), but thanks for the hint!!
-
asteri over 9 yearsYou're a god and I am not and I just thought that you should know.
-
Akshay over 9 yearsYou are too kind @asteri
-
TV Nath over 8 yearswhat if I want .json to be served by the dispatcher servlet. do I have to explicitly map the url pattern?
-
Akshay over 8 years@TharinduVishwanath yes, you will need a url pattern if you want .json requests to be served by dispatcher servlet
-
Christian over 6 yearsCrazy. Thank you @AkshaySinghal. You made my working day a bit shorter today.
-
Akshay over 6 years@Christian happy to help.