# Servlet und java.lang.NoClassDefFoundError



## nonsenz (27. Nov 2008)

Hallo mal wieder,

wie in einem anderen Beitrag schon beschrieben versuche ich derzeit meiner Applikation ein einfaches Webfrontend zu verpassen. Scheinbar ist ein Servlet eine Möglichkeit. Ich stehe dabei total am Anfang und bin Neuling. Nun habe ich allerdings folgendes Problem:
Wenn ich Teile meiner Applikation in ein servlet verpacke bekomme ich einen java.lang.NoClassDefFoundError obwohl mir mein Eclipse sagt, dass alle Libraries gefunden werden. Die Bibliotheken habe ich vorher in meiner Applikation auch erfolgreich verwendet, nur jetzt wirft er mir bei einem (nicht bei allen) package aus einem jar diesen Fehler, als würde er es nicht finden.
Hier mal ausführlich:

```
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class Test
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Thread.java:619)

root cause

java.lang.NoClassDefFoundError: com/hp/hpl/jena/db/IDBConnection
	Test.<init>(Test.java:34)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	java.lang.Class.newInstance0(Class.java:355)
	java.lang.Class.newInstance(Class.java:308)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Thread.java:619)

root cause

java.lang.ClassNotFoundException: com.hp.hpl.jena.db.IDBConnection
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1363)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1209)
	java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	Test.<init>(Test.java:34)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	java.lang.Class.newInstance0(Class.java:355)
	java.lang.Class.newInstance(Class.java:308)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Thread.java:619)
```
Kann es sein, das ich neben den normalen imports innerhalb meiner Klassen auch noch irgendwo anders sowas setzen muss, damit die entsprechenden Bibliotheken gefunden und geladen werden? Wie finde ich heraus wo der Fehler liegt?

Danke schonmal und ciao,
nons


----------



## maki (27. Nov 2008)

Sind dir jars in WEB-INF/lib? 
Wenn nicht, warum nicht? Ist vom Standard vorgeschrieben.


----------



## HLX (27. Nov 2008)

Oder die Datenbanktreiber der Tomcat-Installation spendieren:

--> DB-spezifische JARs in "<catalina_home>/shared/lib" oder "<catalina_home>/common/lib" kopieren.


----------



## nonsenz (27. Nov 2008)

maki hat gesagt.:
			
		

> Sind dir jars in WEB-INF/lib?
> Wenn nicht, warum nicht? Ist vom Standard vorgeschrieben.



Nein waren sie nicht. Ich bin irgendwie naiv davon ausgegangen, dass Eclipse das für mich regelt. Habe sie nun alle ausserhalb von Eclipse (weil ich innerhalb von Eclipse keinen Weg gefunden habe. Gibt es da einen?) in das WEB-INF/lib Verzeichnis kopiert und jetzt klappt alles!

Vielen Dank für die schnelle Hilfe. Wie ich bereits sagte, bin ich Servletmäßig absoluter neuling.

ciao,
nons


----------



## HLX (28. Nov 2008)

Externe Bibliotheken können über:

Rechtsklick auf Projekt --> Properties --> J2EE Module Dependencies --> Add JARs... (oder Add External JARs...) 

der Laufzeitumgebung einer Eclipse-Webanwendung hinzugefügt werden.


----------

