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

我已经查看了几乎所有关于堆栈溢出的相关文章,但我就是不能解决我的问题。

密码如下: 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>

Spring-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 Pages/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'

我看过很多这样的文章,但我就是找不到错误,有人知道会是什么吗?

369540 次浏览

什么是/Elso?

你试试:

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


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


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

试试:

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

对我有用!

您可以尝试在 myController 类上添加一个 @Controller注释,并且 尝试下面的网址 /<webappname>/my/hello.html。 这是因为 org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping我的附加到 myController 类中的每个 RequestMapping。

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

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

检查你的豆子. 。

我也遇到过类似的问题,但我通过添加 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>

  <mvc:default-servlet-handler/>

到 spring-servlet. xml

如果你在用玛文, 将这些内容添加到 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>

犯了同样的错误,我花了很长时间才弄明白。最有可能的原因是编译错误,Java 类没有在 servlet 中发布。请进入您正在使用 tmp1 wtpwebapps [ PROJECT _ NAME ] WEB-INF 类的服务器检查这一点,并尝试找到您的控制器类,以查看它们是否已经发布。如果没有,您需要彻底查明任何编译错误。

我也面临着同样的问题,但是在将名称空间放在下面之后,它工作得很好:

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

增加 <mvc:annotation-driven/>对我有用。 在第 <context:component-scan ............/>行之前添加它

如果你正在使用

<mvc:annotation-driven/>

确保 spring-servlet.xml 是正确的

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

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

另外,请确保您没有重复 组件扫描(用于发现 bean)。如果您的 config XML 已经包含了元素,那么需要去掉所说的注释,那么任何使用 @ Component entScan (basePackages = ... 注释的 Controller 类。

我解决了我的问题: Java Build Path-> JRE 系统库-> Edit-> Alternate JRE->-> Finish

因为它被配置为 JDK 文件夹,所以它给异常

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

确认一下

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

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

在 pom.xml 中,确保将打包设置为像 <packaging>war</packaging>一样的 war,而不是 jar 或其他任何设置。

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

如果您依赖于 春季社交,请检查您是否已经配置了 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);
}

If you want to serve .html files, you must add this <mvc:default-servlet-handler /> in your spring config file. .html files are static. 希望这能帮到某人。

如果你正在使用 maven,那么在你在服务器上运行你的 web 应用之前运行 maven 安装命令,因为它会为你的控制器生成一个类文件,根据我的经验,这就是你的应用所缺少的。

如果您使用的是基于 SpringMVC 配置的 Java 代码,那么在 WebMvcConfigurerAdapter对象中启用 DefaultServletHandlerConfigurer

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

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

  1. 清除安装
  2. 包裹

令人惊讶的是,我能够访问这个页面,错误消失了。同样可以从目标文件夹验证,在那里您将能够找到编译的类,这是早些时候失踪。

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

在 WEB-INF 文件夹中,您有一个文件 web.xml,它引用了 patcherServlet,这里的文件是 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>

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

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

检查控制器所在的包名是否正确。应该可以工作。

All Controllers must be Annotated with @Controller.

@Controller添加到您的控制器或任何地方您有 @RequestMapping为您 json 端点。

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