spring MVC - 映射错误

时间:2017-06-04 00:47:58

标签: spring-mvc

我在这里发现了类似的问题,但我尝试了这些答案,在这里我花了一天时间。我不知道这里有什么问题我被困在我的第一个春季mvc应用程序中。如果有人可以帮助我,那将非常感激。我收到错误404-未找到。控制台错误 - “在名为'mvc-dispatcher'的DispatcherServlet中找不到具有URI [/ FirstSpringMVC / welcome]的HTTP请求的映射”

这是我的整个代码。

的pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.thomsontech</groupId>
  <artifactId>FirstSpringMVC</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>FirstSpringMVC Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>FirstSpringMVC</finalName>
  </build>
</project>

的web.xml

        <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >

    <web-app>
      <display-name>Archetype Created Web Application</display-name>

      <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class>
                 org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

MVC-调度-servlet.xml中

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="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"> 

        <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

        <context:component-scan base-package="com.thomsontech.controller" />

        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
            <property name="prefix">
                <value>/WEB-INF/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>

    </beans>

HelloWorldController.java

    package com.thomsontech.controller;

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;

    @Controller
    public class HelloWorldController {

        @RequestMapping("/welcome")
        public ModelAndView helloWorld() {

            ModelAndView model = new ModelAndView("HelloWorldPage");
            model.addObject("msg", "hello world");

            return model;
        }
    }

HelloWorldPage.jsp

        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <html>
    <body>
        <h1>Spring MVC Hello World Example</h1>

        <h2>${msg}</h2>
    </body>
    </html>

1 个答案:

答案 0 :(得分:0)

好吧,已经对您的代码进行了以下更改以修复404问题。

@Controller
public class HelloWorldController {

    @RequestMapping(value = {"/welcome","/"}, method = RequestMethod.GET)
    public ModelAndView helloWorld() {

        ModelAndView model = new ModelAndView("HelloWorldPage");
        model.addObject("msg", "hello world");

        return model;
    }

}

它几乎与您的相同,只是它回答了在根页面上收到的请求(&#34; /&#34;)。我刚刚添加它来直接测试主页。

我不知道原因,@Controller<context:component-scan base-package="com.thomsontech.controller" />的组合并没有创建helloWorldController bean。所以,我必须通过在<bean id="helloWorldController" class="com.thomsontech.controller.HelloWorldController"></bean>文件中添加mvc-dispatcher-servlet.xml来显式创建bean。我还从同一个文件中删除了<bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>,因为我无法看到在任何地方使用的bean。

所以,你的最终mvc-dispatcher-servlet.xml将是:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="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">

    <context:component-scan base-package="com.thomsontech.controller" />

    <bean id="helloWorldController" class="com.thomsontech.controller.HelloWorldController"></bean>

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

web.xml中,已添加<load-on-startup>1</load-on-startup></servlet>标记,以便在启动时加载mvc-dispatcher servlet。 此外,您必须在使用jstl时升级web-app版本2.3。 JSTL不适用于2.4+版本。但是,这不应该阻止您测试404问题。 ${msg} jsp中的HelloWorldPage将无法呈现&#34; hello world&#34; HelloWorldController控制器返回的字符串。

您的最终web.xml将是:

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

进行这些更改后,请清除tomcat / jetty工作目录,然后执行maven clean install,然后在服务器上运行此应用程序。

希望这会有所帮助,祝你好运!