加载ContextLoaderListener时出现ClassNotFoundException

9
我正在开发一个使用Spring 3.0和Hibernate的Web应用程序。当我尝试在WAS 7.0上部署我的应用程序时,它会给我一个错误 - 无法加载监听器:org.springframework.web.context.ContextLoaderListener]: java.lang.ClassNotFoundException:
以下是我的Web应用程序的样子:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ABC</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

The exception being thrown is as follows,

com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet Error]-[Failed to load listener: org.springframework.web.context.ContextLoaderListener]: java.lang.ClassNotFoundException: class java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at java.beans.Beans.instantiate(Beans.java:190)
at java.beans.Beans.instantiate(Beans.java:75)
at com.ibm.ws.webcontainer.webapp.WebApp.loadListener(WebApp.java:1643)
at com.ibm.ws.webcontainer.webapp.WebAppImpl.loadListener(WebAppImpl.java:671)
at com.ibm.ws.webcontainer.webapp.WebApp.loadLifecycleListeners(WebApp.java:1554)

So, is there anything wrong in web.xml ?

Edit: Sorry I did not mention, I am using Maven to get the jars. I have the required jar file in the WEB-INF folder too i.e. org.springframework.web.context


相关编程问题 https://dev59.com/2mLVa4cB1Zd3GeqPwGlU#12600686 - Adriano
9个回答

11

2
您对spring-web依赖项的定义有误,应为:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web</artifactId>
<version>${org.springframework.version}</version>
</dependency>

你应该拥有我在评论中所写的内容:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

ArtifactId 是 spring-web。 当然,${spring.version} 并不重要,只需确保它与您定义的版本字符串匹配即可。


不,那并没有帮助我,问题仍然存在。 - Ritesh Mengji

2

类 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
在 java.beans.Beans.instantiate(Beans.java:190) 处

是否将包含 org.springframework.web.context.ContextLoaderListener 的 .jar 文件添加到了类路径中?


1
那将是spring-web-3.0.xx.jar。 - abalogh
在Maven方言中: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> - abalogh
你如何将应用程序部署到服务器上?你是复制 Maven 构建的 .war 文件吗? - matt b
而 RAD (不管那是什么)复制了其他所有内容,只是没有复制这个 jar 文件?或者您在已解压的 war 目录中的 WEB-INF/lib 目录为空?如果您手动复制文件,应用程序是否能正常启动? - abalogh
我看到 WEB-INF/lib 文件夹是空的...嗯,看起来 jar 文件没有复制进去。除了 lib 以外,其他都看起来很好。 - Ritesh Mengji
显示剩余3条评论

1
Project> properties> deployment assembly> add > referenced project class path entries> maven dependencies 

重新部署。对我来说有效。

1

将您添加到项目中的任何JAR文件都放置在WEB-INF/lib目录中,并确保它们也被放置在那里。这是服务器在运行时查看第三方库的位置。它们不会自动放置在那里,但您可以通过某些方式自动化此过程(例如使用ANT脚本或类似工具)。为了让事情快速上手,您可以手动将JAR文件复制/粘贴到该目录中。如果您在IDE之外将它们添加到该目录,请确保在将文件放置在该目录后从IDE内部刷新文件夹。


1

Java引擎无法找到类(正如您的异常所说:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener)。

Java将在类路径上搜索该类。您的Web应用程序结构中有一个文件夹(在运行您的“was”服务器的计算机上),您可以在其中放置包含类的jar文件。您需要将spring.jar或spring-web.jar放入此文件夹中。我猜测该文件夹名为lib,它可能位于名为WEB-INF的文件夹中,但我不确定,因为我不了解“was”。

在您将jar文件放入其中后,您可能需要重新启动Web/App服务器。希望这可以帮助您! ^^


0

整天都在为这个错误苦苦挣扎......我有spring-web jar,但事实证明我还需要spring-context-support jar。我将它添加到我的pom中,现在一切都正常了。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

错误日志:

com.ibm.ws.webcontainer.annotation.WASAnnotationHelper collectClasses unable to instantiate class
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
SRVE0293E: [Servlet Error]-[Failed to load listener: org.springframework.web.context.ContextLoaderListener]: 
java.lang.ClassNotFoundException: class java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
loadLifecycleListeners SRVE0279E: Error occured while processing global listeners for the application {0}: {1}
java.lang.NullPointerException
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.inject(WASAnnotationHelper.java:266)

0

Dave是对的!你需要在两个地方都放置所需的JAR文件:

  1. 如果在启动服务器时出现异常,则表示你没有在WEB-INF/lib目录中放置所需的JAR文件,因此你需要将所有的JAR文件放在那里。

  2. 如果在Java代码中看到任何编译错误,则表示你没有正确配置构建路径。将你在WEB-INF/lib中放置的所有JAR文件作为“引用库”放入构建路径中。


0

我曾经遇到过完全相同的问题。 希望这能帮助到某些人。 我的一些依赖库文件在WEB-INF/lib文件夹中缺失,但是在引用库中存在。 我不得不再次执行maven clean install以确保所有的库文件都被拉入lib文件夹中。 如果pom.xml无法正确地拉入库文件,则问题可能也存在于其中。因此,请注意这一点。

项目-> Maven清理和构建-> lib文件夹刷新并确保所有库文件都在那里(或者是抛出异常的特定库文件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接