找不到具有URI的HTTP请求的映射…在名称为的DispatcherServlet中
我已经检查了几乎所有相关的文章,但我只是不能解决我的问题。
这是代码: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>
为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>
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'
我已经查过几十篇这样的文章,但是我找不到这个错误,有人有什么想法呢?
您可以尝试在myController类的顶部添加一个@Controller
注释,然后尝试以下url /<webappname>/my/hello.html
。 这是因为org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
在myController类中的每个RequestMapping前面加上/ my 。
加
<mvc:default-servlet-handler/>
到spring-servlet.xml
如果你正在使用
<mvc:annotation-driven/>
确保你的spring-servlet.xml正确
<context:component-scan base-package="com.....controller" /> tag.
基本上你需要在你的java代码中包含你已经使用注解的所有包。
我解决了我的问题:Java Build Path – > JRE system library – > Edit – > Alternate JRE – > – > Finish
因为它被configuration到JDK文件夹,所以它给予exception
请检查您的[PROJECT_NAME]\target\classes
目录以查看是否生成myController.class
。
如果没有,请检查你所有的java源代码是否有编译错误。
尝试:
<servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
为我工作!
确保
<mvc:annotation-driven/> <context:component-scan base-package="com.hireartists.web.controllers"/>
指向包含控制器的正确的包。
如果您正在使用基于Spring MVCconfiguration的Java代码,请启用WebMvcConfigurerAdapter
对象中的DefaultServletHandlerConfigurer
。
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
检查你的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>
另外<mvc:annotation-driven/>
为我工作。 在行<context:component-scan ............/>
之前添加它
删除Tomcat服务器并在Eclipse中添加新的tomcatconfiguration解决了我的问题。
如果您使用maven作为项目的构build工具,请正确构build您的项目,编译和xml文件中的更改不会反映在编译后。
如果您依赖于Spring Social ,请检查您是否configuration了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); }
如果您想要提供.html文件,则必须在您的springconfiguration文件中添加<mvc:default-servlet-handler />
。 .html文件是静态的。 希望这可以帮助别人。
如果您使用的是maven,那么在运行您的web服务器之前,先运行maven install命令,因为它会为您的控制器生成一个类文件,而我的经验是您的应用程序缺失的。
没有find控制器,这是基本的问题。 这可能是由于以下原因。
A.在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 />
C.检查你拥有控制器的包名称的正确性。 它应该工作。
All Controllers must be Annotated with @Controller.
将@Controller
添加到您的控制器,或者您为json终结点添加了@RequestMapping
。
这在我部署一个类似的应用程序时工作。
如果您正在使用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>
有完全相同的错误,并花了很长时间试图了解它。 这很可能是编译错误,Java类不会在您的servlet中发布。 请检查您使用\ tmp1 \ wtpwebapps [PROJECT_NAME] \ WEB-INF \ classes \的服务器,并尝试find您控制器类以查看它们是否已发布。 如果没有,你需要深入到任何编译错误的底部。
我也面临同样的问题,但下面的命名空间后,它工作正常:
xmlns:mvc="http://www.springframework.org/schema/mvc"
在pom.xml中,确保包装被设置为像<packaging>war</packaging>
这样的<packaging>war</packaging>
,而不是jar或其他任何东西。
我有同样的问题,经过大量的研究后,我发现类没有得到发布在我的目标文件夹。 所以我从cmd运行了下面两个命令
- mvn干净安装
- mvn包
令人惊讶的是,我能够访问该页面,错误消失了。 同样可以从目标文件夹中进行validation,您将能够find之前缺less的合格类。
什么是/ Elso?
你试试:
@RequestMapping("/Elso") public class myController { @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.0!"; return new ModelAndView("hello", "message", message); } }
- Spring MVC:<context:component-scan>和<annotation-driven />标签之间的区别?
- 我应该先学什么,Spring或Hibernate?
- 在使用Spring 4 PropertySource时不能find重复
- Spring MVC @RestController和redirect
- 上下文中的多个包:组件扫描,弹簧configuration
- 在Spring Boot的application.properties中使用envvariables
- Spring 3.1inheritance的Hibernate 4exception
- java.lang.IllegalArgumentException:ServletContext需要configuration默认的servlet处理
- DAO和服务层(JPA / Hibernate + Spring)