java.lang.ClassNotFoundException:eclipse中的org.springframework.web.context.ContextLoaderListener

Posted

技术标签:

【中文标题】java.lang.ClassNotFoundException:eclipse中的org.springframework.web.context.ContextLoaderListener【英文标题】:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener in eclipse 【发布时间】:2014-02-09 19:40:37 【问题描述】:

我正在做一个简单的 Spring MVC 应用程序(不使用 maven),它将在浏览器上打印 hello world。它是eclipse中的一个动态项目,所以我把所有需要的jar文件都放在了构建路径和WEB-INF/lib文件夹中

我尝试了两种解决方案,但都不起作用。

我找到的解决方案:

    清理tomcat工作目录 将 spring-mvc/spring-web.jar jar 文件放入 lib

这是我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>

    <display-name>Spring MVC Application</display-name>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

而且配置contextLoaderListener没有错字,那是什么问题,有没有其他解决办法

Jan 20, 2014 8:16:39 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jan 20, 2014 8:16:39 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.11
Jan 20, 2014 8:16:40 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4618)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5184)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5179)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Jan 20, 2014 8:16:40 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Skipped installing application listeners due to previous error(s)
Jan 20, 2014 8:16:40 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Jan 20, 2014 8:16:40 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/SpringSample] startup failed due to previous errors
Jan 20, 2014 8:16:40 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8081"]
Jan 20, 2014 8:16:40 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jan 20, 2014 8:16:40 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4010 ms

最终我收到 404 错误,因为我的服务无法加载

【问题讨论】:

lib,你的意思是WEB-INF/lib吗? java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 的可能重复项 【参考方案1】:

我在 Eclipse 中遇到了同样的问题。当我进行 maven 全新安装并将生成的 WAR 文件移动到我的 Tomcat webapp 文件夹时,它将毫无问题地运行。但是,为了调试,我想在 Eclipse 中运行,但它会抛出以下错误。

SEVERE: Error configuring application listener of class   org.springframework.web.context.ContextLoaderListener

我四处搜索,直到找到以下博客文章。

http://commonexceptions.blogspot.com/2014/01/java.html

正如作者解释的那样:

这个异常是我没有添加maven依赖导致的 构建路径。我在 Maven 中使用 Eclipse,所以必须包括 构建路径中的 maven 依赖项,如下所述。

请参阅帖子以获取解决方案。这是一个简单的 eclipse 部署程序集配置修复。我花了大约 30 秒,现在我可以在 Eclipse 中调试我的 Spring webapp。

以下是帖子中的相关步骤:

在项目 Web 部署程序集中添加 Maven 依赖项:

打开项目属性(例如:在项目资源管理器中右键单击 项目名称以选择“属性”)。 选择“部署程序集”。 单击右侧导航中的“添加...”按钮。 从指令类型菜单中选择“Java Build Path Entries”,然后单击“下一步”。 从 Java 构建路径条目菜单中选择“Maven 依赖项” 单击“完成”。 现在应该将“Maven 依赖项”添加到 Web 部署程序集并运行它。

当使用 Eclipse WDT 并使用未修改且以前工作的项目时:

如果 Tomcat 正在运行,请停止它 打开“服务器”视图:窗口,然后选择“显示视图”,然后选择“其他”> 服务器 > 服务器 右键单击Tomcat服务器,然后选择“清理Tomcat工作目录”。 右键单击Tomcat服务器,然后选择“清理” 重启 Tomcat 服务器

上述解决方案应该可以解决异常。

【讨论】:

谢谢,经过数小时的努力,试图将现有的 java 项目转换为 eclipse 中的动态 Web 项目,终于成功了。 这样的答案让我如此出色。谢谢艾伦。上帝保佑你。 最初我的应用程序运行良好。但是重启eclipse后为什么我需要按照这个步骤,我没有得到。我没有更改 maven/pom.xml 或任何设置。可以指导一下吗? 谢谢,“清理 tomcat 工作目录”和“清理”对我有用!【参考方案2】:

尽量把spring-web.jar文件直接放到WEB-INF/lib(WEB-INF/lib/spring-web.jar)而不是WEB-INF/lib/spring-mvc/spring-web .jar

【讨论】:

我将 spring-web.jar 与构建路径一起直接添加到 WEB-INF/lib 文件夹中 您是否尝试过在独立的 Tomcat 中打包、部署和测试您的战争? 你的意思是导出项目生成war文件并在tomcat上运行?? 是的,并验证导出的war包含spring-web.jar 可以将war文件解压到一个文件夹中,查看WEB-INF/lib【参考方案3】:

如果您正在创建没有 maven 的简单项目, 需要遵循以下步骤,

    下载所需的 jar 文件,例如我使用的是 spring 4,所以我从Index of release下载了文件

    然后将此文件添加到您的 WebContent/WEB-INF/lib 文件夹中。

    在构建路径中添加 jar 文件(在 eclipse 中:右键单击项目 -> 属性 -> Java 构建路径 -> 添加 JAR...)

这将避免 org.springframework.web.context.ContextLoaderListener 异常。

【讨论】:

【参考方案4】:

如果您已启动并运行 Maven,我有一个非常好的方法可以帮助您学习 Spring MVC。

如果是这样:转到我使用的命令行 (Cygwin)...

mvn 原型:生成 它将要求一个“原型编号”。为你...键入 16 输入组 ID,它只是主包。 输入工件 ID,这是您的项目名称。 SNAP-SHOT --- 只需按回车键,与版本相同。 包 - 与您的组 ID 名称相同。例如:com.spring 输入字母“y”确认,然后按回车键。 在您的工作区目录中执行上述所有操作。这样它就在那里创建。 您可以执行“mvn eclipse:eclipse”在 Eclipse 中加载它,或者您可以只导入它。我更喜欢老式的导入现有项目。

一切都将“已经”为您设置好所有配置(基于 Java),这对您有好处。它将在您的 pom.xml 中包含您需要的所有 Maven 依赖项。您可以根据需要添加或从中提取。

这里的重点是您已经有一个正在运行的项目,您可以从那里开始使用它。我首先像这样创建我的所有项目并删除我不需要的并添加我所做的然后从那里开始。

祝你好运!!!

【讨论】:

【参考方案5】:

这是一个依赖问题,工件中缺少一些依赖关系。 我在 IntelliJ 中的解决方案:

右键项目名称->打开模块设置->问题->添加缺少的依赖到工件

重启服务器(我的情况是tomcat)

希望对你有帮助

【讨论】:

这么简单,非常感谢。 我很高兴它有帮助! :)

以上是关于java.lang.ClassNotFoundException:eclipse中的org.springframework.web.context.ContextLoaderListener的主要内容,如果未能解决你的问题,请参考以下文章