Ich glaub ich stell mich reichlich blöd an, aber ich checks einfach nicht.
Ich hab den Tomcat 4.1.18 auf meinen W2k -Rechner.
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. Hab dort einen „classes“-Ordner mal angelegt und meine class-Datei und sogar die zugehöroge .java-Datei reingepackt, aber da tut sich nix.
Kann mir jemand mit dieser Beschreibung jetzt eine Pfad nennen, in dem ich meine class-Datei packen muß, damit der Tomcat sie bei Aufruf mit „useBean“ findet?
Webapplikationen sind verschiedene Web-Applikationen die auf dem gleichen Applikationsserver laufen. ROOT ist z.b. eine Webapplikation die im Tomcat auf die URL / gemappt ist. Ansonsten gibt es ein webapps Verzeichnis, da kannst du z.b. ein Verzeichnis „xyz“ anlegen dass du dann im Browser über /xyz ansprichst.
Die klassen müssen jeweils ins unterverzeichnis WEB-INF\classes, das hsat du richtig gemacht. Hast du evtl. vergessen dort Unterverzeichnisse anzulegen, falls deine Klasse in einem Package ist? Also z.b. in der java Klasse
package mypackage;
dann muss es auch ein Verzeichnis WEB-INF\classes\mypackage geben (bzw. du anlegen) und dort gehört die Klasse rein
Grüße
Bruno
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Die klassen müssen jeweils ins unterverzeichnis
WEB-INF\classes, das hsat du richtig gemacht. Hast du evtl.
vergessen dort Unterverzeichnisse anzulegen, falls deine
Klasse in einem Package ist?
Meine Klasse ist nicht in einem Package. Aber wenn ich alles richtig mache und ich hab meine Klasse im Ordner WEB-INF/classes liegen, woran kanns dann liegen? Vielleicht zur Hilfe mal die konkrete Fehlermeldung:
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 0 in the jsp file: /Uebung9-2.jsp
C:\Programme\Apache Group\Tomcat 4.1
\work\Standalone\localhost_\Uebung9_0002d2_jsp.java:41: cannot
resolve symbol
symbol : class UserData
location: class org.apache.jsp.Uebung9_0002d2_jsp
UserData user = null;
^
An error occurred at line: 0 in the jsp file: /Uebung9-2.jsp
Generated servlet error:
C:\Programme\Apache Group\Tomcat 4.1
\work\Standalone\localhost_\Uebung9_0002d2_jsp.java:43: cannot
resolve symbol
symbol : class UserData
location: class org.apache.jsp.Uebung9_0002d2_jsp
user = (UserData) pageContext.getAttribute(„user“,
PageContext.SESSION_SCOPE);
^
An error occurred at line: 0 in the jsp file: /Uebung9-2.jsp
Generated servlet error:
C:\Programme\Apache Group\Tomcat 4.1
\work\Standalone\localhost_\Uebung9_0002d2_jsp.java:46: cannot
resolve symbol
symbol : class UserData
location: class org.apache.jsp.Uebung9_0002d2_jsp
user = (UserData) java.beans.Beans.instantiate
(this.getClass().getClassLoader(), „UserData“);
^
3 errors
Meine Java Klasse heißt hierbei UserData und die liegt wie gesagt in webapps/WEB-INF/classes, wobei meine jsp’s im Ordner webapps liegen.
Hab ich vielleicht irgendwelche genrellen Konfigurationen beim Tomcat falsch gemacht? Ich hab den ja bloß installiert und gestartet und dann liefen sofort die jsp-Dateien. Hatte bei der Installationen den Pfad zum JDK angegeben und das wars ja an sich. Muß ich vielleicht noch Einstellungen per Hand in irgendwelchen Dateien vornehmen?
Übrigens:
Webapplikationen sind verschiedene Web-Applikationen die
auf dem gleichen Applikationsserver laufen. ROOT ist z.b. eine
Webapplikation die im Tomcat auf die URL / gemappt ist.
Ansonsten gibt es ein webapps Verzeichnis, da kannst du z.b.
ein Verzeichnis „xyz“ anlegen dass du dann im Browser über
/xyz ansprichst.
Das läuft nich so richtig bei mir. Mach ich auch da was falsch? Hab unter webapps einen Ordner „Uebung“ angelegt und dadrin meine Datei Uebung.html. Wenn ich im Browser http:/localhost:8080/Uebung/Uebung.html aufrufe, bekomme ich eine „ressource is not available“-Fehlermeldung.
Gruß,
Victor
Meine Java Klasse heißt hierbei UserData und die liegt wie
gesagt in webapps/WEB-INF/classes, wobei meine jsp’s im Ordner
webapps liegen.
??? also wenn schon dann müssen sie in webapps/ROOT und die Klassen in webapps/ROOT/WEB-INF/classes liegen. oder in sonst einem verzeichnis einre webapplikation
Das läuft nich so richtig bei mir. Mach ich auch da was
falsch? Hab unter webapps einen Ordner „Uebung“ angelegt und
dadrin meine Datei Uebung.html. Wenn ich im Browser
http:/localhost:8080/Uebung/Uebung.html aufrufe, bekomme ich
eine „ressource is not available“-Fehlermeldung.
Es kann sein, dass dies nur geht wenn du sie aus einem webapp archive „deployst“, also ein .war file nimmst, ansonsten musst du es evtl. inder server.conf von tomcat (conf-verzeichnis) einrichten und da einen Context anlegen… kann dir leider grad nicht auswendig sagen wie
ansonsten musst
du es evtl. inder server.conf von tomcat (conf-verzeichnis)
einrichten und da einen Context anlegen… kann dir leider
grad nicht auswendig sagen wie
Die Datei ist im conf-Verzeichnis, heißt aber server.xml.
Man braucht dazu einen Context-Eintrag in der Art:
Meine Java Klasse heißt hierbei UserData und die liegt wie
gesagt in webapps/WEB-INF/classes, wobei meine jsp’s im Ordner
webapps liegen.
??? also wenn schon dann müssen sie in webapps/ROOT und die
Klassen in webapps/ROOT/WEB-INF/classes liegen. oder in sonst
einem verzeichnis einre webapplikation
Oh sorry… meinte natürlich das Verzeichnis webapps/ROOT/. Da liegen meine JSP’s und er findet sie und die laufen toll. Und im Verzeichnis webapps/ROOT/WEB-INF/classes liegt meine Klasse (ohne Package-Zugehörigkeit)und er findet sie nicht. (siehe Fehlermeldung aus in meiner letzten Nachricht)
Warum?
Gruß,
Victor
Hier der Code aus der Datei Uebung9-2.jsp. Diese Datei wird über eine Datei Uebung9-1.html aufgerufen. Die html-Datei besteht nur aus einem Formular für Namens-, Email- und Alterseingabe mit den Variablennamen „name“, „email“ und „age“.
Schaut ganz so aus, als hätte ich dir einen falschen Rat gegeben: Wenn ich das ganze auf meiner Servlet-Engine ausprobiere (Der Code ist in Ordnung), wird der Bean ebenfalls nicht gefunden.
Da das ganze auch bei meiner Servlet-Engine (Resin) auftritt, vermute ich, dass das WEB-INF/classes Verzeichnis tatsächlich nur Servlets vorbehalten ist… Ich lasse mich aber gerne belehren.
Wie dem auch sei: Lege ein weiteres Verzeichnis „victor“ im besprochenen WEB-INF/classes Verzeichnis an und kopiere die Klasse UserData dort hin. Vor der Kompilation müsstest du noch beide Dateien folgendermaßen abändern:
Bei mir funktioniert es auch ohne package Angabe auf Anhieb.
Ich habe in Uebung9-2.jsp vollen Zugriff auf die Klasse
UserData, die direkt in /classes liegt.
Wie dem auch sei: Lege ein weiteres Verzeichnis „victor“ im
besprochenen WEB-INF/classes Verzeichnis an und kopiere die
Klasse UserData dort hin. Vor der Kompilation müsstest du noch
beide Dateien folgendermaßen abändern:…
Astrein!
Mit der Idee vom Unterverzeichnis victor läufts endlich. Ich war schon echt am Rande der Verzweiflung.
Wollte mich an dieser Stelle nochmal bei allen bedanken, die mir hier geholfen haben. Hat ja doch einige Forum-Einträge gedauert bis ichs hatte, aber schließlich läuft’s. Also, Danke nochmal für eure Geduld mit mir. Ich mach mich jetz ans JSP üben.
Gruß,
Victor