No mapping found for HTTP request with URI Spring MVC

120,027

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.

Share:
120,027

Related videos on Youtube

user962206
Author by

user962206

Updated on October 10, 2020

Comments

  • user962206
    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

    Project Structure

    • Bart
      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
    dnang over 10 years
    I 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 the example part and that's how they got this strange problem.
  • thekosmix
    thekosmix over 10 years
    although it's not necessary that compiled classes should be there in target folder (unless you are using maven), but thanks for the hint!!
  • asteri
    asteri over 9 years
    You're a god and I am not and I just thought that you should know.
  • Akshay
    Akshay over 9 years
    You are too kind @asteri
  • TV Nath
    TV Nath over 8 years
    what if I want .json to be served by the dispatcher servlet. do I have to explicitly map the url pattern?
  • Akshay
    Akshay over 8 years
    @TharinduVishwanath yes, you will need a url pattern if you want .json requests to be served by dispatcher servlet
  • Christian
    Christian over 6 years
    Crazy. Thank you @AkshaySinghal. You made my working day a bit shorter today.
  • Akshay
    Akshay over 6 years
    @Christian happy to help.

Related