开发者

Why Template "Spring MVC Project" in "SpringSource Tool Suite" not work with Tomcat?

开发者 https://www.devze.com 2023-04-02 15:53 出处:网络
When Im create Spring MVC Template project in SpringSource Tool and try to Run on the Tomcat server I have this error:

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


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/'.


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.


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


Found a solution!

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

Why Template "Spring MVC Project" in "SpringSource Tool Suite" not work with Tomcat?

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

That's worked for me

0

精彩评论

暂无评论...
验证码 换一张
取 消