每当我尝试从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
答案 0 :(得分:9)
尝试清除tomcat工作目录并清理。之后,发布您的项目并重新运行。
答案 1 :(得分:5)
我的猜测是你已经在你的webapp(在WEB-INF / lib)文件夹中打包了servlet-api jar,这引起了冲突,因为servlet-api已经存在于容器中。确保在部署时不要在webapp中包含任何servlet-api或jsp-api(或Java EE api)jar。
答案 2 :(得分:1)
我在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>
答案 3 :(得分:1)
如果您在Eclipse中工作,那么只需清理您的项目。
按照这个简单的步骤, 转到项目&gt; 干净...&GT;清理所有项目&gt;确定
答案 4 :(得分:0)
当我尝试使用eclipse LUNA版本和tomcat 7时,我遇到了同样的问题。没有任何额外更改的相同代码在带有tomcat 7的eclipse JUNO中工作。
答案 5 :(得分:0)
验证磁盘中的空间。当eclipse复制文件夹libs(如果没有磁盘空间)时可能会发生此错误