首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ServletContextlistener的ClassNotFoundException

使用ServletContextlistener的ClassNotFoundException
EN

Stack Overflow用户
提问于 2011-10-21 20:34:27
回答 7查看 44K关注 0票数 7

每当我尝试将上下文参数从we.XML获取到ServletContextListener类中时,我都会得到一个异常,我真的很难理解它为什么不能工作,以下是Apache Tomcat 7.0.11日志中的异常:

代码语言:javascript
复制
 Oct 21, 2011 1:24:23 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class alaa.ServletContextListener
java.lang.ClassNotFoundException: alaa.ServletContextListener
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      

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(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

这是我的web.xml的一部分:

代码语言:javascript
复制
 <context-param>
    <param-name>catName</param-name>
    <param-value>meshmesh</param-value>
</context-param>
<context-param>
    <param-name>catBreed</param-name>
    <param-value>egyptian</param-value>
</context-param>  
<listener>
   <listener-class>alaa.CatLisenter</listener-class>
</listener>
<session-config>
      <session-timeout>
        30
      </session-timeout>
</session-config>

这是我的ServletContextListener.java:

代码语言:javascript
复制
package alaa;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class CatLisenter implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
    ServletContext sc = sce.getServletContext();
    String name = sc.getInitParameter("catName");

    String breed = sc.getInitParameter("catBreed");

    Cat maCat = new Cat();
    maCat.setName(name);
    maCat.setBreed(breed);

    sc.setAttribute("cat", maCat);
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    throw new UnsupportedOperationException("Not supported yet.");
}   
}



Here's Cat.java : 





package alaa;

public class Cat {
private String name;
private String breed;


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getBreed() {
    return breed;
}


public void setBreed(String breed) {
    this.breed = breed;
}
 }

many thanks 
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-10-21 21:14:17

尝试清除tomcat工作目录并进行清理。在此之后,发布您的项目并再次运行。

票数 10
EN

Stack Overflow用户

发布于 2011-10-21 20:43:00

我的猜测是,您已经将servlet-api jar打包到webapp (在WEB-INF/lib)文件夹中,这会导致冲突,因为servlet-api已经存在于容器中。在部署webapp时,请确保没有在webapp中包含任何servlet-api或jsp-api (或Java EE api) jars。

票数 5
EN

Stack Overflow用户

发布于 2014-08-21 19:50:28

我在Tomcat7环境中运行JUnit时遇到了同样的问题,我解决了这个问题,在maven (pom.xml)中添加了一个依赖项,如下所示:

代码语言:javascript
复制
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.54</version>
        <scope>provided</scope>
    </dependency>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7849452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档