# JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden



## henpara (30. Jul 2012)

Hallo allerseits,

ich bin noch sehr neu in der Webentwicklung und versuche mich gerade zurechtzufinden.

Eclipse helios ist installiert, Tomcat 7.0 ist installiert. Tomcat Server auf Eclise läuft auch und ich bekomme über JSP einfach Kommandos und Ausgaben hin.

Was jetzt allerdings partout nicht funktionieren will ist über 



> <jsplugin type="applet" codebase ="" code="AppAppletCombination">
> <jsparams>
> <jsparam name="Test" value="0" />
> </jsparams>
> ...



ein simples Applet zu starten.

Eclipse schiebt die compilierten Klassen automatisch nach .\build\classes.
Egal, was ich bei codebase eingebe, ob ich noch ein Archiv angebe (die Klasse in eine JAR packe und mit angebe), es kommt immer beim Aufruf im Browser:


> Laden: Klasse AppAppletCombination nicht gefunden
> java.lang.ClassNotFoundException: AppAppletCombination
> at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
> at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
> ...




Eventuell hat ja jemand eine Idee, irgendwie hört sich das nach einem ganz trivialen Problem an, nur leider bin ich mit Eclipse noch zu unerfahren und finde die Antwort bzw. den Einstellungsort nicht.

lg
henpara


----------



## F.S.WhiTeY (30. Jul 2012)

Moin,

Du bist NEU in der webentwicklung und startest mit JSP?

Das man als Fahranfänger mit einem alten Golf 2 anfängt ist mir ja klar aber das man in der Informatik mit veralterter Technik anfängt?

Vieleicht solltest du dir überlegen ob Du dir nicht lieber JSF 2.0 anschauen möchtest 

Zu deinem Problem:

Du hast den codebase nicht angegeben. Trage da mal den ordner ein, in dem dein Applet liegt. Der Ordner kann absolut (  C:\\woauch\\immer\\der\\Orner\\liegt ) oder relatiev ( ...\da liegt er\ ) angegeben werden. 

Nochmal meine Meinung: JSP ist vertane Zeit. 

LG

David


----------



## henpara (30. Jul 2012)

Danke schonmal für die Info,

leider ist das ganze etwas verzwickter, da ich ein Web-Projekt übernehmen musste.
Dies ist eben über JSP implementiert. Und unter tomcat 3.2 läuft es auch (allerdings damals noch unter java 1.2 compiliert). Tja und das möchte ich jetzt nach tomcat 7 portieren (Das Projekt compiliert schonmal unter java 1.6 ohne Fehler mittlerweile).

Das mit der codebase ist mir klar, aber auch wenn ich sie angebe findet er nichts, vielleicht mache ich da noch Fehler mit relativem und absolutem Pfad? 

Daher dachte ich, das einfachste wäre es, ggf. die JSP umzuschreiben und anzupassen. Aber offensichtlich ist das Problem verzwickter. werde mir JSF2.0 mal anschauen.

Danke schonmal für die Tipps!


----------



## F.S.WhiTeY (30. Jul 2012)

Oha, dann haben sie dich ja ins kalte Wasser geschmissen. Du tust mir fast schon leid sowas übernehmen zu müssen  

Ja spiel einfach mal mit den Pfaden rum, oder lass einfach die codebase weg (den Tag ganz raus nehmen) und leg das Applet in den selben Ordner, wo auch die JSP liegt. 

Vergleich auch noch mal den Namen des Applets, vilt. nur ein Schreibfehler? 

Ich hoffe das Hilft und ich hoffe du bekommst die Chance das Project zu Portieren. Auch wenn das sehr viel Arbeit ist und viel Zeit und Wissen benötigt.


----------



## maki (30. Jul 2012)

> Und unter tomcat 3.2 läuft es auch (allerdings damals noch unter java 1.2 compiliert). Tja und das möchte ich jetzt nach tomcat 7 portieren (Das Projekt compiliert schonmal unter java 1.6 ohne Fehler mittlerweile).


Die Servlet & JSP API haben sich seitdem signifikant geändernt, dass führt IME zu sog. "Silent Fails", d.h. leere Werte (leere String & Null) anstatt Exceptions.

Wirst IMHO nicht umhim kommen als das ganze Ding komplett neu zu schreiben.


----------



## henpara (30. Jul 2012)

> Wirst IMHO nicht umhim kommen als das ganze Ding komplett neu zu schreiben.


Danke für den Hinweis. Daß sich meine Begeisterung gerade in Grenzen hält muss ich wohl nicht erwähnen 

Damit hat sich das hier auch vorerst erledigt.
Vielen Dank nochmal für die schnellen Antworten!

lg
henpara


----------



## freez (1. Aug 2012)

F.S.WhiTeY hat gesagt.:


> Du hast den codebase nicht angegeben. Trage da mal den ordner ein, in dem dein Applet liegt. Der Ordner kann absolut (  C:\\woauch\\immer\\der\\Orner\\liegt ) oder relatiev ( ...\da liegt er\ ) angegeben werden.



Ich habe schon lang nix mehr mit Applets gemacht, aber muss da nicht der Pfad angegeben werden, den der Browser auch erreichen kann? "C:\\...." kann ja nur funktionieren, wenn er den Browser auf dem selben Rechner laufen lässt, wie den Server. Ich würde auf alle Fälle zum Testen die JAR des Applets in den selben Ordner ablegen, wie das JSP File und mit dem Browser versuchen das JAR File zu laden. Erst wenn das geht, würde ich die JAR in den gewünschten Zielordner legen, noch mal mit dem Browser testen und dann die CodeBase auf diesen Pfad legen.


----------



## F.S.WhiTeY (1. Aug 2012)

Moin!



> ...aber muss da nicht der Pfad angegeben werden, den der Browser auch erreichen kann? "C:\\...." kann ja nur funktionieren, wenn er den Browser auf dem selben Rechner laufen lässt, wie den Server....



Das ist nicht ganz richtig. Es soll auch leute geben, die Windwos Server mit dem IIS-Modul zur repräsentation nach außen nutzen. 

Der Pfad der Dort als Codebase angegeben wird oder allgemein für den Webserver zur lokalisierung von ressourcen angegeben wird bezieht sich immer auf die Serverseitige Maschine und das darauf installierte OS. 

"C:\\...." ist also der richtige absolute Pfad wenn man IIS ,XAMPP oder ähnliches auf einer Windowsmaschine laufen lässt. 

"/home/user/htdocs/" wäre dann wahrscheinlich der Pfad der auf einer Linuxmaschine zum tragen kommt. 

Es hat sich allerdings etabliert, relative Pfade zu benutzen. Die sind sicherer ( man sieht von außen die Ordnerstrucktur des Servers nicht) und bequemer weil kürzer. 
Davon abgesehen, sind relative Pfade eine Methode die uns der Server zur verfügung stellt. Denn der arbeitet immer mit absoluten Pfaden. 

Ich mache mal an einem Beispiel klar, wie ein Server aus einem relativen einen Absoluten Pfad macht:


1. Es wird eine Anfrage auf eine webseite unter www.example.tld gestellt. Diese Webseite gibt lediglich ein Bild aus.  Der Pfad für das Bild ist .../Bilder/bild.jpg

2. Der Server schaut in eine Liste, in der Die gehosteten Domains aufgelistet sind (Virtualhost Datei) um zu erfahren welcher Ordner das Document-Root ist. 

3. Der Server findet die Domain und liest aus der liste den Ordner "C:\\Programme\\XAMPP\\example_tld\\"

4. Der Server sucht in dem Verzeichnis nach der Datei und Parsed sie (wenn er sie den Findet)

5. Der Server sucht nach den genannten ressourcen hier sieht er den Pfad: "...\Bilder\bild.jpg".
Nun Parsed er den Pfad und macht daraus : "C:\Programme\XAMPP\example_tld\Bilder\bild.jpg" um auf die Ressource innerhalb des OS zugreifen zu können, denn Windoof kennt ...\Bilder\bild.jpg nicht.
Nachdem er den Pfad hat, Parsed er den rest und gibt die Antwort in Form der Webseite an den Browser zurück.


Das ganze spiel hat weder etwas mit dem Browser noch mit dem OS zu tun. Die verarbeitung der Pfade ist immer Aufgabe des Webservers. 

Richtig ist allerdings, dass eine Domain normalerweise nur ihr Document-Root kennt und daher eine Bild-URL in Form von "/home/example/htdocs/Bilder/Bild" nicht funktionieren wird aber wir sprechen von Eingebettetem Code und der erlaubt, wie PHP, absolute PFade. 

LG

David


----------



## freez (1. Aug 2012)

F.S.WhiTeY hat gesagt.:


> Der Pfad der Dort als Codebase angegeben wird oder allgemein für den Webserver zur lokalisierung von ressourcen angegeben wird bezieht sich immer auf die Serverseitige Maschine und das darauf installierte OS.



OK, das war mir neu. Ich dachte, dass die codebase Angabe für den Browser ist, damit er weiß, wo er die Jar Files findet.


----------

