72

我已经检查了几乎所有关于 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>

我的控制器:

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'

我已经检查了几十篇这样的文章,但我就是找不到错误,有人知道它可能是什么吗?

4

23 回答 23

71

添加

  <mvc:default-servlet-handler/>

到 spring-servlet.xml

于 2014-04-17T19:35:05.730 回答
40

@Controller您可以尝试在 myController 类顶部添加注释,然后尝试以下 url /<webappname>/my/hello.html。这是因为在 myController 类中的每个 RequestMappingorg.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping前面都添加了/my 。

于 2013-09-08T19:07:34.607 回答
30

如果您正在使用

<mvc:annotation-driven/> 

确保您的 spring-servlet.xml 正确

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

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

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

于 2015-01-30T21:21:51.180 回答
15

我解决了我的问题:Java Build Path -> JRE system library -> Edit -> Alternate JRE -> -> Finish

因为它被配置到 JDK 文件夹所以它给出了异常

于 2015-02-10T09:50:17.740 回答
12

确保

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

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

于 2015-07-13T02:32:02.257 回答
10

请检查您的[PROJECT_NAME]\target\classes目录以查看是否myController.class已生成。

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

于 2013-10-23T20:38:10.390 回答
9

尝试:

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

为我工作!  

于 2013-09-08T18:51:29.477 回答
9

如果您使用基于 Spring MVC 配置的 Java 代码,则DefaultServletHandlerConfigurerWebMvcConfigurerAdapter对象中启用。

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
        configurer.enable();
}
于 2016-02-19T18:27:57.780 回答
4

检查你的 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>
于 2013-11-28T08:32:04.203 回答
3

除了<mvc:annotation-driven/>为我工作。在行前添加<context:component-scan ............/>

于 2015-01-16T10:05:03.990 回答
3

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

于 2016-01-24T15:58:47.033 回答
3

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

A. 在 WEB-INF 文件夹中,您有引用 dispatcherServlet 的文件 web.xml。在这里,这种情况是 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 />

C. 检查您拥有控制器的包名称的正确性。它应该工作。

All Controllers must be Annotated with @Controller.
于 2016-05-07T22:34:31.240 回答
2

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

于 2014-06-22T09:36:04.440 回答
2

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

于 2016-02-09T12:58:52.097 回答
2

我遇到了同样的问题,经过大量研究后,我发现这些类没有在我的目标文件夹中发布。所以我从 cmd 运行了以下两个命令

  1. mvn 干净安装
  2. mvn包

令人惊讶的是,我能够访问该页面并且错误消失了。可以从目标文件夹中验证相同的内容,您可以在其中找到之前丢失的已编译类。

于 2016-04-24T15:17:42.307 回答
2

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

于 2015-08-01T18:29:31.517 回答
2

添加@Controller到您的控制器或任何您拥有@RequestMappingjson 端点的地方。

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

于 2016-07-01T14:15:00.663 回答
2

如果您依赖Spring Social,请检查您是否配置了 Web Controller 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);
}
于 2016-01-11T21:01:48.037 回答
1

我也遇到了同样的问题,但是在将命名空间放在下面之后,它工作正常:

xmlns:mvc="http://www.springframework.org/schema/mvc" 
于 2014-07-04T16:23:53.290 回答
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>

于 2014-05-27T14:02:38.550 回答
1

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

于 2015-07-08T06:41:13.327 回答
1

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

于 2015-07-22T08:37:20.003 回答
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); 
    }
}
于 2013-09-08T15:25:24.550 回答