2011-10-21 91 views
6

我得到一個異常,每當我嘗試讓環境參數從we.XMLServletContextListener類,我真的有困難的時候理解爲什麼它不工作, 這裏的中的Apache Tomcat 7.0.11日誌例外:ClassNotFoundException的使用的ServletContextListener

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

你確定你的聽衆正在部署? –

回答

7

嘗試清除tomcat工作目錄並清理。之後,發佈您的項目並重新運行。

+0

我按照你的說法做了,刪除了從\ Apache Tomcat 7.0.11 \ conf並再次運行我的webApp,它工作得很完美,謝謝。 – Rehme

5

我的猜測是,您已經將servlet-api jar打包到了webapp(在WEB-INF/lib)文件夾中,並且由於servlet-api已經存在於容器中,這導致衝突。確保在部署Web應用程序時不要包含任何servlet-api或jsp-api(或Java EE api)jar包。

+0

尚未創建任何servlet或jsp頁面,這是你的意思嗎?我想創建一個servlet,以便我可以獲得ServletContext屬性,然後獲取cat實例。 – Rehme

+0

@RealSilhouette不,我不是這個意思。您正在部署到tomcat的最終版本,是否包含WEB-INF/lib目錄中的任何jar文件,稱爲servlet-api.jar或jsp-api.jar?如果是這樣,那麼你並沒有正確打包戰爭,因爲這些罐子已經存在於tomcat容器中,從而導致衝突。你怎麼建? Maven的?通過IDE? – pap

+0

哪裏有衝突?它說監聽類沒有找到(假設我的手機正確顯示了一切:( –

1

我曾在一個Tomcat 7環境下運行JUnit同樣的問題,我解決它添加在行家(pom.xml中)的依賴是這樣的:

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

我有同樣的問題,當我試圖日食LUNA版本和Tomcat 7的相同的代碼沒有任何多餘的變化,日食JUNO合作和Tomcat 7

0

驗證空間磁盤。當eclipse複製文件夾庫時,如果磁盤空間不足,可能會出現此錯誤

1

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

按照這個簡單的步驟, 轉到項目> 乾淨...>清除所有項目>確定