Ich muss meine Tomcat WAR für bestimmte Funktionen konfigurieren und bin mir nicht sicher, ob dies alles über web.xml
möglich ist, oder ob ich 1+ benutzerdefinierte Filter
s implementieren muss oder eine andere Art von Hackerei.
Meine App packt als myapp.war
. Wenn es also von einer lokalen Tomcat-Instanz bedient wird, kann ich darauf zugreifen, indem ich zu http://localhost:8080/myapp
gehe.
Ganz einfach, ich habe ein welcome-file
( myapp.html
), das ich bedienen soll, wenn Tomcat die folgenden Anfragen erhält:
... wobei <blah>
eine beliebige Zeichenfolge / Regex nach dem Rautenzeichen (#) ist.
Wenn der Benutzer also zu http://localhost:8080/myapp
geht, dann gib ihm myapp.html
zurück. Wenn der Benutzer zu http://localhost:8080/myapp/#fjrifjri
geht, dann rate mal was? Serve zurück myapp.html
.
Aber Wenn der Benutzer zum Beispiel http://localhost:8080/myapp/fizz
aufruft, möchte ich, dass die normale web.xml servlet-mapping
-Logik einsetzt und ich möchte, dass Tomcat jedes Servlet zurückgibt, das auf% co_de abgebildet ist %, usw.
Momentan sieht mein /fizz
wie folgt aus:
Wie kann ich das erreichen?
Wenn Sie sich mit URLs herumschlagen müssen, müssen Sie die Tags servlet und servlet-mapping verwenden:
%Vor% wo Demo ist Ihr Paket und fizz Ihre fizz.java
Um URLs und Dateien zu ändern, die an die aktuelle URL angehängt sind, müssen Sie servlet-mapping -Tags verwenden, bei denen das Servlet mit dem Namen fizz / fizz
Damit können Sie die gesuchten Einstellungen ändern.
Ich hoffe, es hilft ...
Eine Möglichkeit, dies zu erreichen, ist die Verwendung von Filtern wie folgt:
Erstellen Sie einen Filter, der wie folgt auf root /
in web.xml
abgebildet wird
und die Filterzuordnung wie folgt
%Vor%
doFilter()
-Methode den folgenden Code. %Vor%
Ich denke, was Sie versuchen, ist ein Standardverhalten. Ich weiß nicht, warum Sie einen Filter für diesen Zweck verwenden möchten. Die URL: http://localhost:8080/myapp/#fjrifjri
oder etwas ähnliches würde in myapp.html landen, wenn Sie myapp.html als Willkommensdatei in web.xml verwenden. Zum Öffnen eines bestimmten Servlets können Sie das von Andrew erwähnte Servlet-Tag verwenden.
Sie können immer einen Javascript- oder JSP- oder Servlet-Code schreiben, in dem Sie die URL beurteilen und die Anfrage abhängig weiterleiten können.
Ich hatte kürzlich das gleiche Problem wie Sie, zumindest in Bezug auf die ersten beiden Ihrer Anforderungen. So habe ich mein Problem gelöst:
Meine web.xml hat folgendes:
%Vor%und mein Anwendungskontext (myapp-context.xml) hat folgendes:
%Vor%
Ich habe meine Indexdatei (index.jsp) in TOMCAT_HOME / webapps / appctx / WEB-INF / jsp abgelegt. Ich habe keine Willkommensliste in web.xml eingefügt, wie Sie oben sehen können.
Wenn ich den Browser auf zeige
http://localhost:8080/appctx
oder http://localhost:8080/appctx/
Ich lande in der Indexdatei.
Ich habe Spring-framework-3.1.2 verwendet und starte die App in tomcat-7.0.27 unter Windows 7. (Es gibt nur zwei Apps in meinem tomcat dev Server - ROOT und appctx
Ich hoffe, das wird helfen. Viel Glück.
Wie bereits erwähnt, müssen Sie nur Servlet-Mappings für /myapp
; Die Abbildungen nach #
sind in der Tat redundant. Der Inhalt nach #
, sowie der Hash selbst werden niemals gesendet zum Server sowieso .
web.xml und Servlets erkennen '#' in URLs nicht, das ist ein reines Front-End-Konstrukt, es teilt dem Browser mit, welchen Link innerhalb der Seite, zu der Sie gehen möchten. Was Sie tun müssen, ist ein Mapping für die Homepage wie folgt einzurichten:
%Vor%und machen Sie den Rest Ihrer Servlet-Mappings wie gewohnt.
Sie müssen keinen Filter erstellen. Die einfache Lösung ist:
Bearbeiten Sie web.xml
%Vor%Benennen Sie myapp.html in index.html
id="blah"
-Attribut an. Dies ist zum
Mach localhost:8080/myapp/#<blah>
Arbeit. Tags und Links java tomcat servlets servlet-filters web.xml