java - Spring mvc 项目中的 org.springframework.beans.factory.CannotLoadBeanClassException

标签 java spring jsp spring-mvc

我在创建一个简单的 mvc 项目时遇到了异常。在运行时,框架无法找到我的 Controller 类。下图描述了文件层次结构:

enter image description here

以下是使用的 jar 文件:

*commons-logging.jar
*org.springframework.asm-3.1.1.RELEASE.jar
*org.springframework.beans-3.1.1.RELEASE.jar
*org.springframework.context-3.1.1.RELEASE.jar
*org.springframework.core-3.1.1.RELEASE.jar
*org.springframework.expression-3.1.1.RELEASE.jar
*org.springframework.web-3.1.1.RELEASE.jar
*org.springframework.web.servlet-3.1.1.RELEASE.jar

使用了以下文件

index.jsp

<h1>HelloWorld</h1>
<form action="./hello.ds">
    Name:<input type="text" name="name">
         <input type="submit" value="SayHello" />
</form>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>Spring2_MVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- default -->
  <servlet>
    <servlet-name>helloWorld</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloWorld</servlet-name>
    <url-pattern>*.ds</url-pattern>
  </servlet-mapping>
</web-app>

helloWorld-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
"> 
    <!-- default handler mapping -->
    <!-- Handler -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    <!-- controller -->
    <bean name="/hello.ds" class="controller.HelloController" />
    <!-- View Resolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

HelloController.java

package controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;



public class HelloController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception {

        String name = req.getParameter("name");
        Map m = new HashMap();
        m.put("msg","Hello..."+name);
        ModelAndView mav = new ModelAndView("success",m);
        return mav;
    }

}

成功.jsp

${msg}

执行上面的代码后,出现如下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping#0' defined in ServletContext resource [/WEB-INF/helloWorld-servlet.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [controller.HelloController] for bean with name '/hello.ds' defined in ServletContext resource [/WEB-INF/helloWorld-servlet.xml]; nested exception is java.lang.ClassNotFoundException: controller.HelloController
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [controller.HelloController] for bean with name '/hello.ds' defined in ServletContext resource [/WEB-INF/helloWorld-servlet.xml]; nested exception is java.lang.ClassNotFoundException: controller.HelloController
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1267)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1186)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [controller.HelloController] for bean with name '/hello.ds' defined in ServletContext resource [/WEB-INF/helloWorld-servlet.xml]; nested exception is java.lang.ClassNotFoundException: controller.HelloController

详细的错误堆栈可在此处找到:https://drive.google.com/open?id=1gKqBvleeEATU_1SmWaW6O4QO4rwAuwp4

最佳答案

我运行了您在 qs 中共享的确切代码,并且运行良好。可能是当你编译java类时,它们没有重建成WAR并且war没有你的 Controller 类,这会给出类未找到错误。与xsd定义无关。

关于java - Spring mvc 项目中的 org.springframework.beans.factory.CannotLoadBeanClassException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47777309/

相关文章:

java - 无法使用 Java Spring Boot 通过 Rest API 在两个 Docker 容器之间进行通信

java - 如何使用 jar 库刷新 Eclipse RCP 插件

java - 处理复杂数据结构的正确方法是什么?

spring - 使用自定义 AnnotationTransactionAttributeSource 和 tx :annotation-driven

java - 使用列表和复选框的 Spring MVC 数据绑定(bind)

java - 如何通过本地网络向服务器发送请求

javascript - 使用 ibm_db 模块在 Node JS 中执行准备好的语句时出现问题

java - Eureka 租约续约如何进行?

java - Spring mvc 将 url "myapp.com/Foo/12345/test-one"重写为 "myapp.com/Foo/12345/test-one-a-b"

java - 如何在 servlet jsp 中实现生产就绪的登录注销功能