Spring MVC 4.1.7 警告:在 DispatcherServlet 中找不到带有 URI [/user] 的 HTTP 请求的映射

Spring MVC 4.1.7 WARNING: No mapping found for HTTP request with URI [/user] in DispatcherServlet

我正在尝试 link 注释定义 Java 控制器 RequestMapping。具体来说,localhost:8080/user 和 localhost:8080/signin

索引页面加载正常,但这不是控制器的问题。我一定是错过了一些愚蠢的东西。我一直在上下堆栈溢出寻找解决方案,但到目前为止没有任何效果。

此警告最流行的答案似乎是添加 context:component-扫描、mvc:annotation-驱动,甚至只是命名问题。看来我在 xml 中拥有所有必要的配置,然后是一些。我是否缺少有关项目结构的信息?或者 url 模式匹配?有人提到 jstl 并为 urls 添加 c:tags,但这也不起作用。

我正在尝试 运行 所有最新的,也许有问题?我最初在设置环境以使用 webapp 3.1 时遇到了麻烦。大多数配置使用 spring sts 工具自动进行。

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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>group</groupId>
<artifactId>artifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>AppName</name>
<description>App Desc</description>

<!-- custom properties -->
<properties>
    <spring.version>4.1.7.RELEASE</spring.version>
</properties>

<dependencies>
    <!-- spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- j2ee -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- logging -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- testing -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <finalName>InstagramPUE</finalName>
    <sourceDirectory>src/main/java</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceDirectory>webapp</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
        </plugin>
    </plugins>
</build>
</project>

web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     id="igpue" version="3.1">

<!-- app config -->
<display-name>App Display Name</display-name>
<description>App Desc</description>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- app context -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/app-context.xml</param-value>
</context-param>

<!-- servlet config -->
<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/mvc-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    <url-pattern>/signin</url-pattern>
    <url-pattern>/user</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.txt</url-pattern>
</servlet-mapping>
</web-app>

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"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
                       http://www.springframework.org/schema/context 
                       http://www.springframework.org/schema/context/spring-context-4.1.xsd
                       http://www.springframework.org/schema/mvc
                       http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> 

<!-- mvc config -->
<mvc:annotation-driven />
<mvc:resources location="/resources/" mapping="/resources/**" />

<!-- scan for controller -->
<context:component-scan base-package="abnd.igpue.controller" />

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

</beans>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <title>Title</title>
    <meta charset="utf-8" />
    <meta http-equiv="Content-Type" content="text/html" />
    <link href="<c:url value='/resources/css/style.css' />" rel="stylehseet" type="text/css" />
</head>
<body>
    <!-- html -->
    <div id="page">
        <div id="header">
            <div id="title"><span>Title</span></div>
        </div>
        <div id="content">
            <div id="signIn">
                <c:url value="/signin" var="signInLink" />
                <div id="signInLink"><a href="${signInLink}">Sign in to Instagram</a></div>
                <c:url value="/user" var="userLink" />
                <div id="userpage"><a href="${userLink}">User Page</a></div>
            </div>
        </div>
    </div>
    <!-- js -->
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
</body>
</html>

User.java

package abnd.igpue.controller;

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

@Controller 
public class User {

@RequestMapping(value = "/signin")
public String signIn() {  

    // if the signin was successful redirect to user page

    return "redirect:user";
}

@RequestMapping(value = "/user")  
public ModelAndView userHome() {
    ModelAndView mav = new ModelAndView("/jsp/user.jsp");
    mav.setViewName("User");

    String message = "<br><div>"
            + "<h1>Hello World</h1></div><br><br>";

    mav.addObject("message", message);

    return mav;
}
}

我已经开始工作了。我废弃了我拥有的代码,并从头开始完全重建它。我在这两个堆栈溢出 post 之间的上一个项目中发现了一些问题(如下),但即使在让新项目工作之后,我也无法成功更新我最初发布的代码。一定是我遗漏了一些愚蠢的东西。

资源

A post 这里详细说明如何 Using <mvc:resources .../> in spring 3 causes all other views to stop working 另一个 post 这里详细介绍了如何 Add css in spring mvc

我已经将入门 Spring Web MVC 项目上传到我的 github!

如果有人感兴趣,就来吧。您可以下载并导入为 maven 项目。 https://github.com/BorysHN/SpringMVCSkeleton