带有 ServletContextlistener 的 ClassNotFoundException

新手上路,请多包涵

每当我尝试从 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

原文由 Rehme 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

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

原文由 Lauro Caetano 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 pap 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题