2011-01-08 76 views
0

一切正常,但現在我不能再運行我的應用程序。出於某種原因,使用javax。*不被發現但在Eclipse中的進口精...java.lang.NoClassDefFoundError

exception 

javax.servlet.ServletException: Error allocating a servlet instance 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 


root cause 

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1560) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 


root cause 

java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet 
java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
java.security.AccessController.doPrivileged(Native Method) 
java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1560) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:619) 
+0

你從Eclipse啓動?如果是這樣,請檢查運行配置的類路徑選項卡。 – 2011-01-08 22:27:36

回答

0

添加servlet-api.jar到項目類路徑。 Servlet容器已經捆綁了這個jar,所以不需要將它添加到lib

1

您通常在Apache Tomcat「Server Runtime」庫中擁有servlet-api.jar。

當您在Elcipse中定義Server Runtime時,將定義此庫幷包含Tomcat中servet-api.jar的鏈接。

當您創建動態Web項目時,應該在Java Build Path中定義此庫。檢查您的項目是否具有此構建路徑。

-2

只需複製servlet-api jar,然後粘貼到您的webapps lib目錄中即可。然後在eclipse中選擇你的項目 - >鼠標右鍵單擊 - > properties - > java build path - >選擇tab「order and export」 - >選擇All - > finish。

現在只是使用eclipse的應用程序。 我希望它能正常工作。 仍然存在問題,然後告訴我,我會告訴你另一個解決方案

+2

這有效,但這是一個完全錯誤的方式。當您將其部署在其他make/version的servlet容器上時,您的web應用程序將會中斷,而不是您在webapps lib文件夾中放入的libs所在的位置。您應該在項目的屬性中設置* Target Runtime *,然後Eclipse會自動關心它。而且它不是通過在webapps lib中複製servletcontainer特定的庫。 – BalusC 2011-02-22 13:02:18