【问题标题】:ClassNotFoundException with ServletContextlistener带有 ServletContextlistener 的 ClassNotFoundException
【发布时间】:2011-12-12 13:30:13
【问题描述】:

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

 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 的一部分:

 <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:

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 

【问题讨论】:

  • 您确定正在部署您的侦听器吗?

标签: java


【解决方案1】:

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

【讨论】:

  • 我照你说的做了,从 \Apache Tomcat 7.0.11\conf 中删除了上下文文件,然后再次运行我的 webApp,它运行得非常完美,感谢一百万。
【解决方案2】:

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

【讨论】:

  • 还没有创建任何servlet或jsp页面,这是你的意思吗?我正在考虑创建一个 servlet,以便我可以获取 ServletContext 属性,然后将 cat 实例取回。
  • @RealSilhouette 不,我不是这个意思。您要部署到 tomcat 的最终构建,它是否包含 WEB-INF/lib 目录中称为 servlet-api.jar 或 jsp-api.jar 之类的任何 jar 文件?如果是这样,您没有正确打包您的战争,因为这些 jar 已经存在于 tomcat 容器中,从而导致冲突。你怎么建?马文?通过 IDE?
  • 哪里有冲突?它说未找到侦听器类(假设我的手机正确显示所有内容:(
  • @pap WEB-INF/lib 目录没有任何 jar 文件
【解决方案3】:

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

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.54</version>
        <scope>provided</scope>
    </dependency>

【讨论】:

    【解决方案4】:

    如果您在 Eclipse 中工作,那么只需清理您的项目。

    按照这个简单的步骤, 转到项目 > 清理...>清理所有项目>好的

    【讨论】:

      【解决方案5】:

      当我尝试使用 eclipse LUNA 版本和 tomcat 7 时,我遇到了同样的问题。没有任何额外更改的相同代码在 eclipse JUNO 和 tomcat 7 中工作。

      【讨论】:

        【解决方案6】:

        验证磁盘空间。当 eclipse 复制文件夹 libs 时,如果磁盘中没有空间,则可能会发生此错误

        【讨论】:

          猜你喜欢
          • 2016-06-15
          • 1970-01-01
          • 1970-01-01
          • 2012-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-12
          相关资源
          最近更新 更多