在具有名称的DispatcherServlet中找不到具有URI ....的HTTP请求的映射

时间:2013-09-08 12:47:23

标签: spring spring-mvc

我已经检查了几乎所有关于stackoverflow的相关文章,但我无法解决我的问题。

这是代码: web.xml中:

   <display-name>Spring3MVC</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>contextConfigLocation</param-name> 
        <param-value>/WEB-INF/spring-servlet.xml</param-value> 
    </context-param> 
    <listener> 
        <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> 
    </listener>
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
        <url-pattern>/</url-pattern>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
</web-app>

弹簧servlet.xml中:

<context:component-scan base-package="com.mycompany.elso" />
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>   

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

myController的:

public class myController {
    @RequestMapping("/hello")
    public ModelAndView helloWorld() {

        String message = "Hello World, Spring 3.0!";
        return new ModelAndView("hello", "message", message); 
    }
}

网页/ index.jsp:

<html>
<head>
    <title>Spring 3.0 MVC Series</title>
</head>
<body>
    <a href="hello.html">Say Hello</a>
</body>
</html>

网页/ WEB-INF / jsp / hello.jsp:

<html>
<head>
    <title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
</head>
<body>
    ${message}
</body>
</html>

因此,当我启动应用程序时,index.jsp已正确加载,但是当我单击href导航到hello.jsp时,我收到404错误并且服务器日志显示:

No mapping found for HTTP request with URI [/Elso/hello.html] in DispatcherServlet with name 'spring'

我已经检查了几十篇这样的文章,但我找不到错误,任何人都知道它会是什么?

23 个答案:

答案 0 :(得分:68)

添加

  <mvc:default-servlet-handler/>

到spring-servlet.xml

答案 1 :(得分:38)

您可以尝试在myController类的顶部添加@Controller注释 尝试以下网址/<webappname>/my/hello.html。 这是因为org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping为myController类中的每个RequestMapping添加了 / my

答案 2 :(得分:27)

如果您正在使用

<mvc:annotation-driven/> 

确保spring-servlet.xml正确

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

基本上,您需要在java代码中包含已使用注释的所有包。

另外,请确保您没有重复组件扫描(用于发现bean)。如果您的配置XML已包含该元素,那么使用 @ComponentScan(basePackages = ...)注释的任何Controller类都需要删除所述注释。

答案 3 :(得分:14)

我解决了我的问题: Java构建路径 - &gt; JRE系统库 - &gt;编辑 - &gt;替代JRE - &gt; - &GT;完成

因为它被配置为JDK文件夹所以它给出了Exception

答案 4 :(得分:9)

尝试:

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

为我工作!

答案 5 :(得分:9)

确保

<mvc:annotation-driven/>
<context:component-scan base-package="com.hireartists.web.controllers"/>

指向包含控制器的正确包。

答案 6 :(得分:9)

请检查您的[PROJECT_NAME]\target\classes目录,了解是否生成myController.class

如果没有,请检查所有java源代码是否有任何编译错误。

答案 7 :(得分:6)

如果您正在使用基于Spring MVC配置的Java代码,请启用DefaultServletHandlerConfigurer对象中的WebMvcConfigurerAdapter

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
        configurer.enable();
}

答案 8 :(得分:3)

<mvc:annotation-driven/>的加法对我有用。 在行<context:component-scan ............/>

之前添加它

答案 9 :(得分:3)

检查你的Bean xmlns ..

我也有类似的问题,但我通过添加mvc xmlns来解决它。

<?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:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p"
    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.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">


    <context:component-scan base-package="net.viralpatel.spring3.controller" />
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

答案 10 :(得分:3)

如果要提供.html文件,则必须在spring配置文件中添加此<mvc:default-servlet-handler />。 .html文件是静态的。 希望这可以帮助别人。

答案 11 :(得分:2)

有完全相同的错误,我花了很长时间试图理解它。它很可能归结为编译错误,java类没有在servlet中发布。请通过进入您正在使用的服务器\ tmp1 \ wtpwebapps [PROJECT_NAME] \ WEB-INF \ classes \来检查这一点,并尝试查找控制器类以查看它们是否已发布。如果不是,您需要了解任何编译错误。

答案 12 :(得分:2)

@Controller添加到您的控制器或您的json终点@RequestMapping

这在部署类似应用程序时对我有用。

答案 13 :(得分:2)

找不到控制器,这是基本问题。 可能是由于以下原因。

一个。在WEB-INF文件夹中,您有文件web.xml,它引用了dispatcherServlet。这里的情况是mvc-config.xml

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

B中。这个mvc-config.xml文件有名称空间,它必须扫描控制器。

<context:component-scan base-package="org.vimal.spring.controllers" />
<mvc:annotation-driven />

℃。检查具有控制器的包名称的正确性。它应该工作。

All Controllers must be Annotated with @Controller.

答案 14 :(得分:2)

我有同样的问题,经过大量的研究,我发现这些类没有在我的目标文件夹中发布。所以我从cmd

运行了以下两个命令
  1. mvn clean install
  2. mvn package
  3. 令人惊讶的是我能够访问该页面并且错误消失了。可以从目标文件夹验证相同内容,您可以在其中找到之前缺少的编译类。

答案 15 :(得分:2)

如果您正在使用maven,那么在您在服务器上运行Web应用程序之前,请运行maven install命令,因为它将为您的控制器生成一个类文件,根据我的经验,这是您的应用程序所缺少的。

答案 16 :(得分:2)

如果您依赖Spring Social,请检查您是否配置了Web控制器bean:

import org.springframework.context.annotation.Bean;
import org.springframework.social.connect.web.ConnectController;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.ConnectionRepository;

...

@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
    return new ConnectController(connectionFactoryLocator, connectionRepository);
}

答案 17 :(得分:2)

如果您使用maven作为项目的构建工具,正确构建项目,则编译后代码和xml文件中的更改不会反映出来。

答案 18 :(得分:1)

在pom.xml中,确保打包设置为war,如<packaging>war</packaging>,而不是jar或其他任何东西。

答案 19 :(得分:1)

删除Tomcat服务器并在Eclipse中添加新的tomcat配置解决了我的问题。

答案 20 :(得分:1)

我也遇到了同样的问题,但在下面的命名空间之后,它运行正常:

xmlns:mvc="http://www.springframework.org/schema/mvc" 

答案 21 :(得分:1)

如果您使用的是Maven, 将这些添加到您的pom.xml

<dependency>
<groupid>javax.servlet</groupid>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>

<dependency>
<groupid>taglibs</groupid>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>

答案 22 :(得分:0)

什么是/ Elso?

你试试:

@RequestMapping("/Elso")
public class myController {

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

        String message = "Hello World, Spring 3.0!";
        return new ModelAndView("hello", "message", message); 
    }
}