4

When Im create Spring MVC Template project in SpringSource Tool and try to Run on the Tomcat server I have this error:

WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/test/] in DispatcherServlet with name 'appServlet'.

This is default: /test/src/main/java/ru/test/test/HomeController.java

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory
            .getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! the client locale is " + locale.toString());

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
                DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate);

        return "home";
    }

}

This is default: /test/src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

</web-app>

This is default /test/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="ru.test.test" />



</beans:beans>

Default /test/src/main/webapp/WEB-INF/spring/root-context.xml is empty

Selector
  • 506
  • 1
  • 6
  • 21

4 Answers4

19

I was getting the exact same issue and I solved it. Basically, when the Spring MVC Project gets created, Eclipse does not configure src/main/webapp as a source directory by default. It likely needs to be a source directory because then Eclipse will treat the files differently when it builds it.

Right clicking on the 'webapp' folder and clicking 'Build Path -> Use as Source Folder' solved this issue for me. The other comments here are wrong: I did NOT have to change my RequestMapping or servlet url-pattern. '/' for both worked for my 'localhost:8080/test/'.

0

After you create your Spring Template MVC Project in Eclipse, you have to build it MANUALLY, before running it on a server.

Daniel Hedberg
  • 5,677
  • 4
  • 36
  • 61
0

Found a solution!

When you start creating the project, you have to define this. (pay attention to the third level superapp ) enter image description here

In order to get to the app, the url is http://localhost:8080/superapp

That's worked for me

Federico Traiman
  • 1,191
  • 1
  • 13
  • 18
0

It looks to me like the url you're trying to hit is "/test/" and the web.xml is only mapping "/". You could change that to "/*" if you want spring to handle all urls, and then you'd also have to change your home controller to be "/test".

Or you could just hit the url "http://localhost:8080/" which is the root URL that you have mapped to the home controller.

Kevin
  • 24,871
  • 19
  • 102
  • 158
  • In error we see "appServlet" it's mean Servlet accept request. – Selector Sep 02 '11 at 15:00
  • Yes, you didn't say what URL you're trying to hit from the browser, but it looks to me like you're doing: http://localhost:8080/test/ which is unmapped. – Kevin Sep 02 '11 at 15:02
  • Browser open default url after run http://localhost:8080/test/. I tryng change RequestMapping value to "/test" or "/test/" or "test/" but this doesn't working for me. – Selector Sep 02 '11 at 15:06
  • 2
    Did you read my answer? Don't use that URL. It's not mapped. Use `http://localhost:8080/` – Kevin Sep 02 '11 at 15:12
  • @Selector: you need to change both the RequestMapping and the url pattern in the web.xml. THe url pattern in web.xml allows spring's DispatcherServlet to handle the request, and then the RequestMapping url maps the inbound url to the controller. – Kevin Sep 02 '11 at 19:12
  • Hm im just run it on vFabric, and it's work ... then im again run it on tomcat servert and this work to. – Selector Sep 03 '11 at 08:45