Jetty nicht routing-servlet als web-Anwendung im Unterverzeichnis von webapps
Ich habe eine web-Anwendung, die einwandfrei funktioniert (servlets genannt), wenn ich den Ordner der Anwendung in der {JETTY_HOME}/webapps Verzeichnis.
Wenn ich eine Kopie der web-Anwendung in einem Unterverzeichnis von webapps ist, dann werden alle statischen Dateien werden aufgerufen, wenn ich navigieren Sie zu der Website, aber die servlets, die rufe ich per ajax zurückkehren 404.
http://localhost/shlaa
- Aufrufe /shlaa/CommentController.tun richtig und kein Fehler.
http://localhost/mapapp/shlaa
-
gibt 404 zurück, die für den ajax-call /mapapp/shlaa/CommentController.tun
web.xml in beiden Pfaden /WEB_INF Ordner enthält die folgenden
<servlet> <servlet-name>CommentController</servlet-name> <servlet-class>web.CommentController</servlet-class> </servlet> <servlet-mapping> <servlet-name>CommentController</servlet-name> <url-pattern>/CommentController.do</url-pattern> </servlet-mapping>
Den jetty.xml Ordner in {JETTY_HOME}/etc enthält die folgenden:
<Call class="org.mortbay.jetty.webapp.WebAppContext" name="addWebApplications"> <Arg><Ref id="contexts"/></Arg> <Arg><SystemProperty name="jetty.home" default="."/>/webapps</Arg> <Arg><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Arg> <Arg type="boolean">True</Arg> <!-- extract --> <Arg type="boolean">True</Arg> <!-- parent priority class loading --> </Call>
- Ich bemerkte das .tun Erweiterung in Ihrem servlet-Muster. Verwenden Sie Streben durch irgend eine chance ?
- Sie sagte auch localhost/shlaa Anrufe /mapapp/shlaa/CommentController.tun richtig und kein Fehler. Kannst du die Konfiguration dafür ? Ich bin neugierig, wie das funktioniert
- Nein, nicht mit struts - habe gerade in die Gewohnheit zu beenden servlets Verweise mit diesem.
- Ich habe platziert eine geklonte Anwendung von shlaa in beiden webapps root und den webapps/mapapp Verzeichnis,ich habe korrigiert die Referenz oben
- Im ersten Fall Sie sagte, es funktioniert richtig : localhost/shlaa Anrufe /mapapp/shlaa/CommentController.tun . Ich Frage mich, wie das arbeiten. Was ist Ihre web.xml Konfiguration für das ?
- Sorry für die Verwirrung - localhost/shlaa richtig Aufrufe /shlaa/CommentController.tun, wenn ich Browsen auf localhost/shlaa/CommentController.tun. In der Anwendung gibt es eine ajax-Aufruf, der hat einen http-get für CommentController.auf die Seite laden.
- Dass macht Sinn . Vielen Dank für die Klarstellung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um richtig implementieren von Java-Web-Applikation Application Server oder nur ein einfaches Web-Container (wie in deinem Fall), die web-app (auch als web-Modul) MÜSSEN eine bestimmte Struktur haben. Die top-level-Verzeichnis des web-Moduls ist die Dokument-root der Anwendung.
Hier ist eine Web-Modul-Struktur:
Nun, was Sie definieren, in
<url-pattern>
im web.xml - Datei ist es nur ein logische /virtuelle Pfad für einige servlet. Es ist wieder NICHT eine echte Pfad zu den physischen Speicherort der servlet-Klasse, aber ein logischer Weg - Sie machen es sich wie Sie es wünschen.OK, jetzt müssen Sie Ihre webapp mit der richtigen Struktur Recht in der webapps - Verzeichnis. Zum Beispiel, im Bild oben Montage Wurzel symbolisiert Ihr webapp-Ordner. So nehmen Sie diesen Ordner entweder direkt oder Sie können ein WAR (Web application ARchive) und legen Sie Sie rechts unter
webapps
- Verzeichnis. Es ist nicht so, dass in webapps haben Sie ein Verzeichnis und in diesem direcory es gibt mehrere webapps. Alle web-apps müssen direkt unter webapps-Verzeichnis.So, in Ihrem Fall, wenn Sie Ihre webapp Ordner hat einen Namen shlaa, müssen Sie diesen Ordner direkt unter
webapp
. Zeitraum.Nun Zitat aus der offiziellen Java-EE-docs:
In deinem Fall die URL der webapp wird
http://localhost:8080/shlaa
Nun Zitat von der Anlegestelle in der wiki-docs (Jetty/Howto/SetContextPathto):
Um die lange Geschichte kurz zu einfach Ihre web-app unter webapps Verzeichnis damit alles funktioniert.
Für die
<url-pattern>
- fühlen Sie sich frei, zu definieren, was Muster, das Sie mögen.BEACHTEN Sie: eigentlich sind es mehrere Möglichkeiten zum konfigurieren der Steg, d.h. die XML-Konfiguration ist nicht der einzige. Sehen Konfigurieren des Jetty für die details.
Zitat von Die Java™ Servlet 3.0 SpecificationVersion:
Beispiel mit Ihrem Namen.
Ihre webapp name ist mapapp (es ist die Anwendung root). Sie möchten, dass Ihre CommentController.tun zugegriffen werden über
Dann (wenn alle anderen requiremants wie directory-Struktur, etc. erfüllt sind) in Ihrem web.xml Sie den folgenden:
Dem ersten Schrägstrich (
/
) in der oben genannten url-pattern symbolisiert context-root /Kontext-Pfad (mapapp in diesem Fall).Auf diese Weise wird es funktionieren.
Hier werden einige nützliche links.
Der Java EE 5 Tutorial:
Module
Anwendungen
Der Java EE 6 Tutorial:
Anwendungen
Steg
Anwendungen
Hoffe, dies wird Ihnen helfen.
UPDATE
Für die Jetty-spezifische Konfiguration finden Sie unter diesem link:
Wie man eine web-app reagiert nur auf einen bestimmten port
Hier ist, was ich denke, geschieht.
Nur Klonen Ihre Anwendung shlaa in beiden webapps root und den webapps/mapapp nicht Klonen Sie Ihre servlets an eine neue Position.
Den statischen Inhalten funktioniert, weil diese Dateien sind eigentlich an dieser Stelle vorhandenen und Jetty, der Ihnen dient, da die richtige Lage
Für servlets der server erkennt nur einen Ort, an dem man innerhalb shlaa/web/WEB-INF/classes
(da Sie geklont Ihrer app, ich nehme an, Ihr Klon wird so etwas wie shla/mapapp/web/WEB-INF/classes)
Was Sie tun müssen, ist, ändern Sie die web.xml so, dass shlaa/mapapp wird auch erkannt
e.g : (versuchen Sie, eine Kombination von unten)