Applet kann unter WEB-INF/classes nicht gefunden werden

Laura87

Mitglied
Hallo Leute,

ich habe eine Web-Application mit einer JSP in der Root, einem Package-Ordner mit verschiedenen Klassen (die zum Teil mit der Datenbank kommunizieren) und ein default Package mit meinem Applets drin.

Quasi so (vereinfachter Auszug):
WebApplication
'-default Package
---'-Clock.java
---'-DBApplet.java
'-JavaKlassenPackage
---'-DBKlasse.java
'-WEB-INF
---'-classes
------'-JavaKlassenPackage
---------'-DBKlasse.class
------'-Clock.class
------'-DBApplet.class
'-TestWebsite.jsp


die Applets alleine Funktionieren, wenn ich sie in Eclipse einzeln (Run As -> Java Application) anstarte, aber auf meiner Website local und auf dem Server leider nicht. Dort bekomme ich folgende Fehlermeldung:

java.lang.ClassNotFoundException: Clock.class


Ich hab es so eingebunden:
HTML:
<applet codebase="WEB-INF/classes" code="Clock.class" width="300" height="25">
</applet>

Nachdem ich ein bischen im Internet gestöbert habe, wurde ich daraufhin gewiesen, dass man Applets nicht im WEB-INF/classes Ordner ansprechen kann und daher auch nicht findet. So habe ich die .class dateien auf der gleichen Ebene wie meine TestWebsite.jsp hinkopiert:

WebApplication
'-default Package
---'-Clock.java
---'-DBApplet.java
'-JavaKlassenPackage
---'-DBKlasse.java
'-WEB-INF
---'-classes
------'-JavaKlassenPackage
---------'-DBKlasse.class
------'-Clock.class
------'-DBApplet.class
'-TestWebsite.jsp
'-Clock.class
'-DBApplet.class

und natürlich den HTML-Code angepasst:
HTML:
<applet code="Clock.class" width="300" height="25">
</applet>

und siehe da ...die TestWebsite.jsp greift auf das Clock-Applet zu. Aber sobald ich ein Applet einbinde, welches auf eine andere Klasse zugreift, findet er diese andere Klasse natürlich nicht, weil die anderen .class Dateien ja in WEB-INF/classes liegen.

Kann mir vielleicht jemand sagen wo ich die Applets ablegen und wie ich sie dann in der JSP einbinden soll, sodass sie auch auf die anderen Klassen (die wiederum auf eine DB zugreifen) zugreifen können?

Viele Liebe Grüße
Laura
 
N

nillehammer

Gast
Die .class-Dateien eines Applets müssen genau, wie alle anderen Resourcen, die der Browser laden soll (bspw. Bilder) in einem Ordner liegen, der für den Browser zugreifbar ist. WEB-INF/ ist per Definition nicht für den Browser zugreifbar. Das hast Du ja soweit auch schon selbst rausgefunden.

Such Dir also irgend einen anderen Ordner unterhalb von Deines webapps-Ordners aus. WICHTIG: Dies gilt nur für die .class-Dateien, die vom Applet benötigt werden. Die .class-Dateien für Deine serverseitige Webanwendung gehören natürlich unterhalb von WEB-INF.

Wenn Du eh schon eine Java-Basierte Webanwendung mit Datenbankzugriff hast. Ist es vielleicht eine gute Idee, den Datenbankzugriff über diese Anwendung zu kapseln und das Applet über HTTP mit der Webanwendung sprechen zu lassen. Das hat den Vorteil, dass Du keine Datenbankpasswörter über den Code des Applets veröffentlichst.
 

Laura87

Mitglied
Danke für die schnelle Antwort.

Ich hab es jetzt in einen anderen Ordner gepackt. Nun greift mein Applet auf die Klasse zu, aber die Klasse greift nicht mehr auf die DB zu :(
 

Laura87

Mitglied
Ich habe keine Fehlermeldung in der Konsole, da ich direkt auf dem Server teste. Lasse mir werte in dem Applet auf der JSP zurückgeben, damit ich nachvollziehen kann wo meine Anwendung rein gesprungen ist. Und schaue natürlich ob sich in meiner Datenbank etwas getan hat.

Ich habe zu beginn den DB-Aufruf direkt über die JSP aufgerufen. das Gateway hatte eine Verbindung erstellt und Daten aus der Datenbank gelesen, gelöscht und ein result in die Datenbank geschickt. Doch das Problem war, das dieser Aufruf nur mit einem neuladen der Seite passiert ist. Daraufhin hab ich ein thread-fähiges Applet geschrieben(welches alle paar Sekunden in die DB schauen soll) Dies lag anfangs unter WEB-INF/classes. Dort kann es aber nicht von der JSP angesprochen werden. Deswegen hab ich jetzt das Applet, die dazugehörigen Klassen und das M-Gateway(was meine Verbindung mit dem Server aufbaut) unterhalb der Root abgelegt. Nun findet die JSP das Applet, das Applet die Klassen und die Klassen das Gateway, aber das Gateway baut keine Verbindung mit der Datenbank auf... :(

Kann evtl. nochmal jemand erklären wie genau ich was wo hinlegen muss oder wie ich etwas anders machen kann?
 

L-ectron-X

Gesperrter Benutzer
Ich habe keine Fehlermeldung in der Konsole, da ich direkt auf dem Server teste.
Ein Applet läuft stets auf dem Client. Also solltest du mit einem Client testen! In seiner Java-Console können sich Fehlermeldungen finden, die Aufschluss über die Art des Problems geben können.

Wie hast du das Applet aktuell eingebunden?
 

Laura87

Mitglied
ich habe das Applet so eingebunden:

HTML:
<applet code="DBApplet.class" width="300" height="25">
</applet>

in dem Applet lasse ich eine Textnachricht erscheinen, die sich an verschiedenen stellen ändert und ich so weiß wo er hin gesprungen ist.

local kann ich die JSP natürlich auch aufrufen mit:

http://localhost:8080/WebApplication/testWebsite.jsp

aber da gibt er mir doch nix in der Konsole aus?! Außer das das Tomcat gestartet ist. ???:L
 

Laura87

Mitglied
Wie machst du es denn jetzt?
Was genau macht das Applet? Stellt es eine Verbindung zur DB her? Oder erzeugt es nur Testausgaben zur Nachverfolgung?

Das Applet ruft eine Klasse auf, die eine Verbindung mit der DB erstellt (erstellen soll :() und an das Applet einen wert zurückliefert, den ich mir zum Testen in einem Textfeld auf der JSP anzeigen lasse.
 

L-ectron-X

Gesperrter Benutzer
Hmm, das Applet ruft eine Klasse auf, die die Verbindung zur Datenbank herstellt....

Und diese Klasse arbeitet mit einem Datenbanktreiber? Wie/wo hast du denn eingebunden?
 

mvitz

Top Contributor
Und weiterhin solltest du direkt von Anfang an bedenken, dass dann das Applet beim Client (Browser) läuft und nicht mehr auf dem Server.

Solange du testst und beides auf dem selben Rechner läuft stellt das kein Problem dar, aber wenn du von einem anderen PC als Client fungierst, kann es durchaus sein, dass dieser keinen Zugriff auf die Datenbank hat.
 

Ähnliche Java Themen

Neue Themen


Oben