2015-02-12 97 views
1

我跟着“Spring MVC初学者指南”一书,并且遇到了似乎请求映射问题。Spring MVC - 在名为'DefaultServlet'的DispatcherServlet中没有找到具有URI [/ webstore /]的HTTP请求的映射

我已经看到,并试图在其他类似的堆栈溢出问题,以下解决方案:

  • 改变“的url-pattern”自/至/ *
  • 改变两个URL模式和参数在RequestMapping注释为 “/欢迎”
  • 加入<mvc:default-servlet-handler/>到DefaultServlet-servlet.xml中
  • 改变的url-pattern为 “/ WEB-INF/JSP/*”

我有下面的代码:

目录结构:

enter image description here

HomeController.java

package webstore; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class HomeController { 

    @RequestMapping(value="/") 
    public String welcome(Model model) { 
     model.addAttribute("greeting", "Welcome to Web Store!"); 
     model.addAttribute("tagline", "The one and only amazing webstore!"); 
     return "welcome"; 
    } 

} 

的welcome.jsp

<%@ taglib prefix="c" 
uri="http://java.sun.com/jsp/jstl/core"%> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> 
     <title>Welcome</title> 
    </head> 
    <body> 
     <section> 
      <div class="jumbotron"> 
       <div class="container"> 
        <h1>${greeting} </h1> 
        <p>${tagline} </p> 
       </div> 
      </div> 
     </section> 
    </body> 
</html> 

DefaultServlet-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?> 

<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.xsd  
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="com.packt.webstore" /> 

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

的web.xml

<web-app version =" 3.0" 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_3_0.xsd"> 


    <servlet> 
     <servlet-name>DefaultServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

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


</web-app> 

下面是当我在IDE启动服务器(弹簧工具整个服务器日志套件):

Feb 12, 2015 12:32:07 AM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:webstore' did not find a matching property. 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server version:  Apache Tomcat/7.0.59 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server built:   Jan 28 2015 15:51:10 UTC 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server number:   7.0.59.0 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Name:    Mac OS X 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Version:   10.9.2 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Architecture:   x86_64 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Java Home:    /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Version:   1.7.0_60-b19 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Vendor:   Oracle Corporation 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_BASE:   /Users/richiethomas/Documents/workspace-sts-3.6.3.SR1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_HOME:   /Users/richiethomas/Downloads/apache-tomcat-7.0.59 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.base=/Users/richiethomas/Documents/workspace-sts-3.6.3.SR1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.home=/Users/richiethomas/Downloads/apache-tomcat-7.0.59 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dwtp.deploy=/Users/richiethomas/Documents/workspace-sts-3.6.3.SR1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Djava.endorsed.dirs=/Users/richiethomas/Downloads/apache-tomcat-7.0.59/endorsed 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dfile.encoding=UTF-8 
Feb 12, 2015 12:32:07 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/richiethomas/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 
Feb 12, 2015 12:32:07 AM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8080"] 
Feb 12, 2015 12:32:07 AM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
Feb 12, 2015 12:32:07 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 536 ms 
Feb 12, 2015 12:32:07 AM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Feb 12, 2015 12:32:07 AM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.59 
Feb 12, 2015 12:32:07 AM org.apache.catalina.deploy.WebXml setVersion 
WARNING: Unknown version string [ 3.0]. Default version will be used. 
Feb 12, 2015 12:32:08 AM org.apache.catalina.core.ApplicationContext log 
INFO: No Spring WebApplicationInitializer types detected on classpath 
Feb 12, 2015 12:32:08 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Feb 12, 2015 12:32:08 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Feb 12, 2015 12:32:08 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 1010 ms 
+0

当你建立你的WAR文件,什么** **确切名称是否得到产生的?另外,如果您设置了'/*',那么在使用URL“http:// localhost:8080/webstore /'调用服务时会出现什么错误? – 2015-02-12 08:16:31

+0

我该如何检查?我在我的tomcat服务器上grep了所有的.war文件,但是我只找到了一个sample.war文件。这是否意味着.war,因为我的项目没有建成? 我正在使用的IDE是Spring Tool Suite,按照我所遵循的“新手指南”教程中的建议,但如果需要,我也可以使用IntelliJ。 – 2015-02-12 08:30:55

回答

1

您的问题似乎与组件扫描, 您正在扫描错误的软件包。控制器位于网络存储器封装,所以在你的servlet配置改变:

<context:component-scan base-package="webstore" /> 

或移动您的控制器来com.packt.webstore包。

当您的应用程序正在部署时,您应该在日志中看到哪些url映射已被注册,然后您将知道此修复是否有效。

+0

这是问题所在。不知怎的,这个包被搞砸了。我用合适的命名删除并重新实现了它,匹配 base-package属性和完整的包名称(com.packt.webstore),现在运行。谢谢,很好的接收。 – 2015-02-12 09:18:27

1

web.xml中尝试改变

<servlet> 
    <servlet-name>DefaultServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

</servlet> 

<servlet> 
    <servlet-name>DefaultServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/DefaultServlet-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
+0

尝试了这一点,不幸的是仍然得到了同样的错误:在名为'DefaultServlet'的DispatcherServlet中没有找到具有URI [/ webstore /]的HTTP请求的映射 – 2015-02-12 08:57:47

-1

建立在新的工作项目。 文件 - >新建 - >项目 - > Maven的项目 - >下一步

选择复选框 - >创建一个简单的项目(跳过原型选择)

组ID com.packt 工件ID网络存储器 包装战争

目录结构Directory Structure

HomeController.java

package com.packt.webstore.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class HomeController { 

    @RequestMapping("/") 
    public String welcome(Model model) { 
     model.addAttribute("greeting", "Welcome to Web Store!"); 
     model.addAttribute("tagline", "The one and only amazing webstore"); 

     return "welcome"; 
    } 
} 

的welcome.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> 
<title>Welcome</title> 
</head> 
<body> 
    <section> 
    <div class="jumbotron"> 
     <div class="container"> 
     <h1> ${greeting} </h1> 
     <p> ${tagline} </p> 
     </div> 
    </div> 
    </section> 
</body> 
</html> 

的web.xml

<web-app version="3.0" 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_3_0.xsd"> 
    <servlet> 
    <servlet-name>DefaultServlet</servlet-name> 
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> 
    </servlet> 

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

</web-app> 

DefaultServlet-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<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.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 


    <mvc:annotation-driven /> 
    <context:component-scan base-package="com.packt.webstore" /> 

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

</beans> 

的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>com.packt</groupId> 
    <artifactId>webstore</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.0.3.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <properties> 
    <maven.compiler.source>1.7</maven.compiler.source> 
    <maven.compiler.target>1.7</maven.compiler.target> 
    </properties> 
</project> 
+0

您能否告诉问题的错误在哪里? – 2015-10-18 22:51:33

+0

可以详细说明你的答案 – 2015-10-18 23:09:40