Beans im Java Web Services Develpment Pack

Hallo!
Ich habe das JWSDP für Win2000 und schreib gerade an einer JSP, die eine Java-Klasse als Bean benutzt. Meine Frage ist nun, in welchen Ordner die Klasse gehört, damit sie von der JSP gefunden wird.
Die Bean muß wohl irgendwie in einen „classes“ Ordner, aber ich weiß nicht wo der ist. Hab die Bean jetzt schon versuchshalber mal in diverse Ordner gepackt, aber die JSP findet nix.
Hilfe.
Gruß,
Victor

Hi.

IMHO liegen Klassen (Bean oder nichtBean) immer in dem durch den Package-Namen definierten Verzeichnis. Also: Wenn dein Bean z.B. in laut Definition im Package com.victor liegt, mußt du es dann entsprechend im classed/com/victor der Servletengine (meistens WEB-INF/classes) ablegen. Ohne Package-Definition am Anfang der Klasse also direkt im WEB-INF/classes Verzeichnis der laufenden Instanz.

mfG,

J.P.Jarolim

Hi.

IMHO liegen Klassen (Bean oder nichtBean) immer in dem durch
den Package-Namen definierten Verzeichnis. Also: Wenn dein
Bean z.B. in laut Definition im Package com.victor liegt, mußt
du es dann entsprechend im classed/com/victor der
Servletengine (meistens WEB-INF/classes) ablegen. Ohne
Package-Definition am Anfang der Klasse also direkt im
WEB-INF/classes Verzeichnis der laufenden Instanz.

Irgendwie check ich das noch nicht. Ich mach grad so’n Tutorial und hab alle Übungen in einem von JWSDP gegebenen Verzeichnis, nämlich webapps/ROOT/. Dort gibts ein Unterverzeichnis WEB-INF. Wenn ich die Klasse da reinpack, tut sich nichts. Hab da drin dann auch mal einen Ordner classes angelegt und da die Klasse reingepackt, aber nichts.
Das Tutorial redet auch davon, dass es vielleicht bereits irgendwo einen speziellen Ordner für die Klassen gibt. Hat das JWSDP so einen speziellen Ordner? Genau steht da:

Once you have defined the class, compile it and make sure it is
available in the web-server’s classpath. The server may also define
special folders where you can place bean classes, e.g. with Blazix
you can place them in the „classes“ folder.

Ich hab in der Klasse kein Package angegeben.

Vielleicht liegts ja auch gar nicht an der Klasse, dass das JSP nicht läuft. Hier also auich mal die Fehlermeldung:

org.apache.jasper.JasperException: Unable to compile class for JSPNote: sun.tools.javac.Main has been deprecated.

An error occurred at line: 1 in the jsp file: /Uebung9-2.jsp

Generated servlet error:
C:\Programme\jwsdp-1.1\work\Standard Engine\localhost_\Uebung9_0002d2$jsp.java:56: Class org.apache.jsp.UserData not found.
UserData user = null;
^

An error occurred at line: 1 in the jsp file: /Uebung9-2.jsp

Generated servlet error:
C:\Programme\jwsdp-1.1\work\Standard Engine\localhost_\Uebung9_0002d2$jsp.java:59: Class org.apache.jsp.UserData not found.
user= (UserData)
^

An error occurred at line: 1 in the jsp file: /Uebung9-2.jsp

Generated servlet error:
C:\Programme\jwsdp-1.1\work\Standard Engine\localhost_\Uebung9_0002d2$jsp.java:64: Class org.apache.jsp.UserData not found.
user = (UserData) java.beans.Beans.instantiate(this.getClass().getClassLoader(), „UserData“);
^
3 errors, 1 warning

Danke schonmal für die Hilfe, aber kannste mir vielleicht nich genau einen Pfad nennen, wo das rein soll? Sorry, aber ich bin noch echt JSP-Newbie.
Gruß,
Victor

Hi.

Irgendwie check ich das noch nicht. Ich mach grad so’n
Tutorial und hab alle Übungen in einem von JWSDP gegebenen
Verzeichnis, nämlich webapps/ROOT/. Dort gibts ein
Unterverzeichnis WEB-INF. Wenn ich die Klasse da reinpack, tut
sich nichts. Hab da drin dann auch mal einen Ordner classes
angelegt und da die Klasse reingepackt, aber nichts.
Das Tutorial redet auch davon, dass es vielleicht bereits
irgendwo einen speziellen Ordner für die Klassen gibt. Hat das
JWSDP so einen speziellen Ordner? Genau steht da:

Once you have defined the class, compile it and make sure it is
available in the web-server’s classpath. The server may also define
special folders where you can place bean classes, e.g. with Blazix
you can place them in the „classes“ folder.

Leider kenne ich mich mit dem JWSDP nicht wirklich aus - Ich arbeite da derzeit mit Resin.

Grundsätzlich gilt: Deine Servlet Engine benötigt als allererstes Java, um deine JSP’s und Klassen kompilieren zu können. Dh. dass du eine Classpath-Variable unter Windows einrichten mußt, die dem Java-Compiler erstens sagt, wo die Java-Basis Klassen liegen und in der du zusätzliche Pfade angeben kannst, in denen deine eigenen Klassen liegen.

Zusätzlich definiert die Servlet-Engine noch einen zusätzlichen Pfad, in dem es JSP’s findet (Applikationspfad) und einen, wo zusätzliche Klassen zu diesem Projekt abgelegt werden können (WEB-INF).

Im WEB-INF/classes Verzeichnis kannst du eigene Klassen ablegen, im WEB-INF/lib Verzeichnis kannst du z.B. eigene JAR’s ablegen. Viele Servlet-Engines machen im WEB-INF-Verzeichnis auch noch ein „work“-Verzeichnis, in dem die kompilierten JSP’s abgelegt werden.

Ich hab in der Klasse kein Package angegeben.

Dann sollte sie direkt im Verzeichnis WEB-INF/classes abgelegt sein.

org.apache.jsp.UserData not found.
UserData user = null;

Also die Klasse UserData wird wohl von dir sein. Es ist eindeutig, dass deine Servlet-Engine die Klasse nicht findet. Bist du dir sicher, dass deine Klasse auch korrekt kompiliert ist? Nicht alle Servletengines kompilieren vorliegende Klassen automatisch. Geh sicher, dass das kompilierte .class file ebenso im WEB-INF Verzeichnis liegt.

Wenn das nichts bringt, schau dir mal die Konfiguration von JWSDP an. Es könnte sein, dass deine Testapplikation falsch konfiguriert ist und gar nicht weis, dass da ein WEB-INF-Verzeichnis auf sie wartet.

mfG,

J.P.Jarolim

Hallo.

Ich glaub ich stell mich reichlich blöd an, aber ich komm da nich so richtig mit.
Ich beschreib das Problem nochmal von vorn. Ich hab übrigens jetz den Tomcat 4.1.18 drauf, der ist übersichtlicher als das komplette JWSDP.
Ich pack meine bisherigen jsp-Dateien in den Ordner webapps/ROOT.
Dort werden sie ganz toll gefunden und ausgeführt.
Jetzt hab ich hier meine erste jsp-Datei, die eine Java class-Datei über den Befehl useBean aufruft. Und ich weiß einfach nicht in welchen Ordner diese class-Datei gehört, damit sie gefunden wird. Momentan findet er sie jedenfalls nicht.
In der Doku les ich dazu folgendes:

WebappX - A class loader is created for each web application that is
deployed in a single Tomcat 4 instance. All unpacked classes and
resources in the /WEB-INF/classes directory of your web application
archive, plus classes and resources in JAR files under the /WEB-:INF/lib directory of your web application archive, are made visible
to the containing web application, but to no others.

Was meinen die jetzt mit „web application“ und mit „web application archive“? Ich hab wie gesagt bisher bloß einzelne jsp-Dateien, die alle so im Ordner webapps/ROOT liegen. Dort gibt es zwar auch einen Ordner WEB-INF, aber da ist nur eine Datei „web.xml“ drin. Einen classes-Ordner gibts dort nicht.

Kann mir jemand mit dieser Beschreibung jetzt eine Pfad nennen, in dem ich meine class-Datei (oder muß ich etwa die .java-Datei nehmen) packen muß, damit der Tomcat sie bei Aufruf mit useBean findet?

Gruß,
Victor

Hi.

Ich glaub ich stell mich reichlich blöd an, aber ich komm da
nich so richtig mit.

Ich stell mich bei neuen Themen meistens auch blöd an - Liegt wohl in der Natur der Dinge :wink:

Ich beschreib das Problem nochmal von vorn. Ich hab übrigens
jetz den Tomcat 4.1.18 drauf, der ist übersichtlicher als das
komplette JWSDP.

Ich würde dir da aus Erfahrung zum Resin Web Server raten.
http://www.caucho.com/resin

Ich pack meine bisherigen jsp-Dateien in den Ordner
webapps/ROOT.
Dort werden sie ganz toll gefunden und ausgeführt.
Jetzt hab ich hier meine erste jsp-Datei, die eine Java
class-Datei über den Befehl useBean aufruft. Und ich weiß
einfach nicht in welchen Ordner diese class-Datei gehört,
damit sie gefunden wird. Momentan findet er sie jedenfalls
nicht.

In dem webapps/ROOT-Verzeichnis sollte ein WEB-INF Verzeichnis eingerichtet sein. In diesem kannst du folgende Verzeichnisse einrichten:

classes: Die normale Klassenablage
lib: Ablage von jar’s

Was meinen die jetzt mit „web application“ und mit „web
application archive“? Ich hab wie gesagt bisher bloß einzelne
jsp-Dateien, die alle so im Ordner webapps/ROOT liegen. Dort
gibt es zwar auch einen Ordner WEB-INF, aber da ist nur eine
Datei „web.xml“ drin. Einen classes-Ordner gibts dort nicht.

Das classes bzw. lib - Verzeichnis mußt du selber im WEB-INF Verzeichnis anlegen.

Zu deinen Fragen:

web-Application ist das, was du programmierst: Eine menge an JSP- und Class-Files, die miteinander arbeiten.

web-application-archive ist eine Sonderform: Hier werden alle JSP+Zugehörigen Klassen in einem File gespeichert (.war) und abgelegt.
Mehr Informationen unter java.sun.com

.jar-Files sind Sammlungen von Java-Klassen. Wenn du dir z.B. einen MySQL-JDBC-Treiber holst, besteht der aus ziemlich vielen voneinander abhängigen einzelnen Klassen. Diese werden aber in einem .jar-File zur Verfügung gestellt - Dieses kannst du dann ganz unkompliziert im lib-Verzeichnis ablegen.

Kann mir jemand mit dieser Beschreibung jetzt eine Pfad
nennen, in dem ich meine class-Datei (oder muß ich etwa die
.java-Datei nehmen) packen muß, damit der Tomcat sie bei
Aufruf mit useBean findet?

Im Endeffekt sollte es dann so ausschauen:

(1) …/webapps/ROOT/
(2) …/webapps/ROOT/WEB-INF/
(3) …/webapps/ROOT/WEB-INF/classes
(4) …/webapps/ROOT/WEB-INF/lib

unter (1) liegen die JSP’s selber, unter (3) liegen Klassen, Servlets und unter (4) liegen fertige .jar - Packete.

Ich hoffe, dass ich das jetzt verständlich erklärt habe,

mfG,

J.P.Jarolim