【问题标题】:Servlet [example] in web application [/SpringMvcDemo] threw load() exception java.lang.ClassNotFoundException:Web 应用程序 [/SpringMvcDemo] 中的 Servlet [example] 引发 load() 异常 java.lang.ClassNotFoundException:
【发布时间】:2020-07-18 07:58:51
【问题描述】:

我一直在尝试按照 spring mvc 文档运行一个名为 SpringMvcDemo 的简单 Spring MVC 项目。当我尝试运行该项目时,我得到了 load() 异常 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。我已经被困了好几天了。任何帮助将不胜感激。

完整的堆栈跟踪

Jul 18, 2020 12:45:46 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [example] in web application [/SpringMvcDemo] threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:539)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:520)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1042)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:983)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4864)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)

web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>SpringMvcDemo</display-name>
  
   <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

example-servlet.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx.xsd" >
     
    <context:component-scan base-package="com.spring.controller"></context:component-scan>
     
    <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>

控制器类ExampleController.java

package com.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ExampleController {
    
    @RequestMapping("/example")
    public ModelAndView example() {
        
        ModelAndView model = new ModelAndView("example");
        return model;
    }
}

项目文件结构

P.S:我已将所有 Spring jar 添加到我的项目类路径中

【问题讨论】:

  • 具体是哪个“Spring MVC 文档”?现代 Spring 应用程序是使用 Spring Boot 编写的,这消除了大部分内容的需要。 (您可以在 start.spring.io 生成一个准备好编写控制器的项目。我推荐 Thymeleaf 而不是 JSP;它是一个较新的替代品。)
  • 这个link
  • 请注意,这是针对 Spring 3.0 的。不幸的是,Google 有将搜索结果返回到那个版本的习惯(我今天上班时抱怨过),但 Spring 的当前版本是 5.2。 3.0 版已有 10 多年历史了。只需转到start.spring.io,选择“Web MVC”和 Thymeleaf(或 JSP,如果必须),您就可以开始了。

标签: java xml spring spring-mvc


【解决方案1】:

在 example-servlet.xml 中尝试使用内部资源视图解析器而不是 UrlBasedViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

也可以试试这个链接,希望对你有帮助

https://crunchify.com/how-to-fix-java-lang-classnotfoundexception-org-springframework-web-servlet-dispatcherservlet-exception-spring-mvc-tomcat-and-404-error/

【讨论】:

  • 试过 InternalResourceViewResolver,仍然面临同样的问题
  • 我已经尝试了上面链接中提到的部署组装方法,然后才在这里发布。但是当我这样做时,我得到了完全不同的错误。在这种情况下,Tomcat 服务器无法启动,并出现错误“在 localhost 启动 Tomcat v9.0 服务器遇到问题”A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SpringMvcDemo]]
  • 一定有一些依赖问题然后可能尝试使用maven并让maven处理所有此类依赖。
  • 是的,你是对的,我让 maven 处理所有的 spring 依赖项并且它工作正常
猜你喜欢
  • 2015-06-05
  • 2017-10-20
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2017-11-24
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多