【问题标题】:404 Requested resource not available when running simple Spring MVC HelloWeb404 运行简单 Spring MVC HelloWeb 时请求的资源不可用
【发布时间】:2015-02-21 17:34:05
【问题描述】:

为此,我还阅读了一些关于 stackoverflow 的旧帖子,但我没有得到我需要的解决方案。

我正在创建一个简单的 Spring MVC HelloWeb 应用程序。

为此,我使用以下文件

1) web.xml 用于配置 DispatcherServlet

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Web Application</display-name>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

2) 然后我写 Simple HelloController 如下:

package com.tutorialspoint;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.ui.ModelMap;
@Controller
public class HelloController{
@RequestMapping(value="hello" ,method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}

3) 之后我配置HelloWeb-servlet.xml如下

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans     
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.tutorialspoint"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
<property name="order" value = "1" ></property>
</bean>
</beans>

4) hello.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

5) 包-nfo.java

package com.tutorialspoint;

我将war导出到tomcat 7 webapps文件夹并重启tomcat服务。

我在运行的 tomcat 控制台中检查了 HelloWeb 应用程序。

我点击网址http://&lt;URL&gt;:8080/HelloWeb/hello.

我收到以下错误

javax.servlet.ServletException: Servlet.init() 用于 servlet HelloWeb 抛出异常 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) java.lang.Thread.run(未知来源) 根本原因 org.springframework.beans.factory.BeanCreationException:创建 bean 时出错
名称'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping': bean初始化失败;嵌套异常是 java.lang.NoSuchMethodError:
org.springframework.context.ApplicationContext.findAnnotationOnBean(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/annotation/Annotation; org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) java.security.AccessController.doPrivileged(本机方法) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:255) org.springframework.web.servlet.DispatcherServlet.createDefaultStrategy(DispatcherServlet.java:672) org.springframework.web.servlet.DispatcherServlet.getDefaultStrategies(DispatcherServlet.java:640) org.springframework.web.servlet.DispatcherServlet.initHandlerMappings(DispatcherServlet.java:435) org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:334) org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:323) org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:498) org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:1) org.springframework.context.event.SourceFilteringListener.onApplicationEventInternal(SourceFilteringListener.java:81) org.springframework.context.event.SourceFilteringListener.onApplicationEvent(SourceFilteringListener.java:66) org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78) org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49) org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76) org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274) org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:383) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:427) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:341) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) java.lang.Thread.run(Unknown Source) 根本原因

java.lang.NoSuchMethodError: org.springframework.context.ApplicationContext.findAnnotationOnBean(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/annotation/Annotation; org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping.determineUrlsForHandler(DefaultAnnotationHandlerMapping.java:108) org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.detectHandlers(AbstractDetectingUrlHandlerMapping.java:80) org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58) org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119) org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:69) org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73) org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:70) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:350) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1331) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) java.security.AccessController.doPrivileged(本机方法) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:255) org.springframework.web.servlet.DispatcherServlet.createDefaultStrategy(DispatcherServlet.java:672) org.springframework.web.servlet.DispatcherServlet.getDefaultStrategies(DispatcherServlet.java:640) org.springframework.web.servlet.DispatcherServlet.initHandlerMappings(DispatcherServlet.java:435) org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:334) org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:323) org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:498) org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:1) org.springframework.context.event.SourceFilteringListener.onApplicationEventInternal(SourceFilteringListener.java:81) org.springframework.context.event.SourceFilteringListener.onApplicationEvent(SourceFilteringListener.java:66) org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78) org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49) org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76) org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274) org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:383) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:427) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:341) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

【问题讨论】:

  • 标题是我错误发布的,我的问题是以下错误
  • java.lang.NoSuchMethodError: org.springframework.context.ApplicationContext.findAnnotationOnBean
  • 您使用的是哪个版本的 Spring?
  • 查看此处提供的答案stackoverflow.com/questions/8611777/…
  • 嗨 Gaurav,你解决了这个问题吗?

标签: java spring spring-mvc


【解决方案1】:

这是由于 Spring jars 版本不匹配。我将我的应用程序从 Spring 2 升级到 Spring 3 。我们需要删除 spring-2.5.6.jar,因为 Spring 3 不需要它。它解决了我的问题。

【讨论】:

    【解决方案2】:

    我认为您的 RequestMapping 中缺少斜线。你能尝试下一个修复吗?

    @RequestMapping(value="/hello" ,method = RequestMethod.GET)
    

    【讨论】:

    • 我尝试了您的建议,但仍然收到错误
    • 是classpath中jar的版本不匹配问题吗?commons-logging-1.1.1.jar,javaee-api-5.jar,org.springframework.asm.jar,org.springframework .beans.jar,org.springframework.context.jar,org.springframework.core.jar,org.springframework.web.jar,org.springframework.web.servlet-3.0.0.M3.jar,spring-context-3.2 .4.RELEASE.jar,spring-web.jar 在我的类路径中
    【解决方案3】:

    在“HelloWeb-servlet.xml”中添加“”来启用注释配置。您已经在控制器类中使用了注解,但是 Spring 容器如何识别控制器。

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多