# Servlet lässt sich nicht deployen



## HarryG32 (31. Okt 2012)

Bekomme folgenden Fehler beim Deployen des Servlets über den Tomcat Manager:


HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:299)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:103)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:302)
	org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:157)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1436)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1282)
	org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:103)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:302)
	org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:157)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.30 logs.

Ich hab dazu einiges im Web gefunden und auch die Libraries hinzugefügt (in WEBINF/lib), dabei auch auf mögliche Dependencies zwischen common.io und common.fileupload geachtet....jetzt bin ich draufgekommen, dass ich eigentlich gar keine Klassen aus den Apache Packages verwende! Und das  nachdem ich geschlagene 3h alle möglichen Libraries von 1.0 bis irgendwas probiert habe und alles im Internet durchforstet habe, was es dazu gibt. Was kann da der Grund sein, dass er die Klassen verlangt??! Ich bin mittlerweile echt ratlos.

Lokal läuft der Fileupload per Servlet einwandfrei und aufm Server kann ich das Servlet nedmal deployen?!!  Muss ich beim Uploaden/Downloaden eines Files diese Packages verwenden???  Kann von euch jemand was brauchbares aus dieser Fehlermeldung lesen??? Bin für jeden Tipp dankbar!!

Zum Uploaden des Files möchte ich auf einen anderen Thread von mir verweisen:
http://www.java-forum.org/netzwerkprogrammierung/143171-applet-xml-file-server-speichern.html Vielleicht verletze ich damit irgendwelche Standards und/oder Sicherheitprotokolle?


----------



## JimPanse (31. Okt 2012)

sorry...


----------



## JimPanse (31. Okt 2012)

HarryG32 hat gesagt.:


> Lokal läuft der Fileupload per Servlet einwandfrei und aufm Server kann ich das Servlet nedmal deployen?!!



Die Aussage macht keinen Sinn. Ein Servlet läuft immer in einem Container -> in deinem Fall Tomcat. Was meinst du d.h. Lokal bzw. Server deployen?


----------



## turtle (31. Okt 2012)

> java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream


Ist doch ziemlich eindeutig, oder?

Du hast die commons-io.jar NICHT deployed. Die muss unter WEB-INF/lib stehen.


----------



## HarryG32 (31. Okt 2012)

@: JimPanse: "Lokal" heisst in meinem Eclipse Projekt auf meinem Clientrechner und aufm "Server" möchte ich es auf meinem angemieteten Webspace im Tomcat-Container deployen...ist schon klar, dass das Servlet jedesmal in einem Tomcat-Container läuft, nur scheint es da Unterschiede zu geben, denn lokal funktioniert alles bestens...

@turtle: Du bist ja ganz ein schlauer, hab ich ned geschrieben, dass ich geschlagene 3h alle möglichen Versionen von common.io und common.fileupload (da gibt es auch dependencies) ins WEBINF/lib-Verzeichnis meines Webprojektes  kopiert (und wieder rausgelöscht habe) und es beim deployen trotzdem immer wieder dieser Fehler gekommen ist.

Schade, ich brauche den Upload dringend, brauchbare Tipps hab ich bisher leider ned bekommen. Kann mir keiner sagen, warum er diese Klassen überhaupt vermisst, wenn ich sie garned verwende in meinen Servlets?? Bitte lest euch mein Posting durch bevor ihr irgendwas postet....

Komisch ist nur, dass ich diese Fehlermeldung jetzt auch bei einem anderen Servlet bekomme, anscheinend könnte das Problem auch am Deployen liegen, im Tomcat-Manager steht "Select war-file to upload" dort "Browse" ich zu meinem war-file, das lokal vorhanden und und "deploye" es, dann kommt er sch.... Fehler wie oben beschrieben....


----------



## HarryG32 (31. Okt 2012)

So, jetzt hab ich das Ganze per FTP hochgeladen und es funktioniert, keine Ahnung was da los war? Anscheinend ein Problem mit dem Deployment, muss aber serverseitig vorliegen, soll ich da mal an einen Admin schreiben??


----------



## nillehammer (31. Okt 2012)

Nur so eine (etwas abwegige) Idee: Die Manager-App von Tomcat bietet mit dem Deployment von War-Dateien ja selbst eine File-Uploadfunktion an. Dafür braucht sie die commons-Klassen. Diese sind eigentlich bei der Installation des Tomcat dabei. Es ist zwar praktisch ausgeschlossen, das zu verfuddeln. Aber vielleicht hat ein übereifriger Admin sie gelöscht oder falsch verlinkt oder CATALINA_HOME und CATALINA_BASE verwechselt oder oder... Kannst Du denn per ftp oder ssh durch den Verzeichnisbaum der Tomcat-Installation browsen? Dann könntest Du selbst nachschauen. Ansonsten Mail an Admins


----------



## HarryG32 (6. Nov 2012)

@nillehammer: danke für deine Ausführungen..ich bin da ganz deiner Meinung, leider bin ich bisher noch nicht dazu gekommen den Verzeichnisbaum zu durchsuchen, wenigstens funktioniert es per ftp-upload.

komisch ist nur, dass das Deployment über den Manager anfangs einwandfrei funktioniert hat und jetzt nimma geht, obwohl ich nichts geändert habe...aber vorerst egal.

Ich hab noch ein anderes Problem: wenn ich beim Applet etwas ändere, muss ich immer ein neues Eebprojekt im Tomcat-Verzeichnis erstellen, damit es die Änderungen auch übernimmt....das Applet liegt in einem jar-File im Wurzelverzeichnis des Projektes, genauso wie die Html-Seiten.

so sieht der Link aus:  /tomcat/webapps/simulation1/applet.jar

mittlerweile hab ich schon "simulation6", da ich bei jeder Änderung (Applet in Elipse kompilieren, als jar-File exportieren und in mittels neuem Projekt einfügen) ein neues Projekt im Tomcat-Container erstellen muss.....undeployen und neu uploaden hilft garnix, die Steuerungsfunktionen im Manager helfen auch nix, alle möglichen Caches hab ich auch schon zig-mal gelöscht, ohne Erfolg.

Kann es daran liegen, dass der HTML-Teil inkl. Applet per Webserver ausgeführt wird und dort gecached ist? Auf diesen hab ich nämlich keinen Zugriff, kann ihn also nicht stoppen und neu starten...


----------

