Tomcat 7-Problem mit nachgestellten Schrägstrichen bei Webanwendungen

13

Kürzlich habe ich meinen Tomcat-Server von der 6.x-Version auf die neueste 7.x-Version aktualisiert.

Ich hatte ein paar Probleme und hoffte, Hilfe zu bekommen.

Ich habe eine Anwendung namens MyApp

Wenn ich auf tomcat6 zu http://www.example.com/MyApp/page/ ging, bekam ich normalerweise das gewünschte Ergebnis.

Wenn ich jetzt auf tomcat7 genau dieselbe URL besuche (mit dem abschließenden Schrägstrich), erhalte ich den Fehler: "Ressource ist nicht verfügbar", da der Tomcat denkt, dass / MyApp / page / ein ganzer Webanwendungsname ist, anstatt Anforderungsnamen zu sein Seite unter der MyApp Webapp.

Ich benötige den Schrägstrich am Ende meiner URL, da ansonsten die Fehlermeldung "HTTP-Status 405 - Anforderungsmethode 'GET' nicht unterstützt" angezeigt wird. Dies ist in Ordnung, da ich die GET-Methode für die Anforderung "page" nicht zugelassen habe .

Wenn jemand weiß, wie er Tomcat sagt, dass ein abschließender Schrägstrich nach dem Pfad der vorhandenen Webanwendung nicht bedeuten sollte, dass er auf eine neue Webanwendung umgeleitet wird, ruft er den gesamten "String" auf und verarbeitet die Anforderung einfach wie auf Tomcat6.


quelle
Gibt es ein Standard - Servlet in die web.xml, die abgebildet wird /*? Ansonsten verwendet tomcat eine Willkommensliste. Normalerweise wird nur das erste Pfadsegment als Kontextstamm interpretiert. Es scheint also nicht das Problem zu sein, Ihre Web-App nicht zu finden.
Mana
Das erste Pfadsegment ist ein Kontextstamm und funktioniert wirklich, es findet es, aber die folgenden Pfade sind nicht Teil des ersten Pfads, sondern der Tomcat-Suche nach Webapp mit dem gesamten Pfad. Ich habe nichts, was das konfiguriert ist nicht voreingestellt ..
Ich verstehe nicht wirklich, was du sagst. Es tut uns leid. Wenn Sie eine Webanwendung mit dem Namen konfiguriert haben, verwendet MyAppTomcat diesen Webanwendungskontext unter Verwendung des verbleibenden Pfads page/. Wenn nicht, wird nach dem ROOTKontext gesucht, wobei der vollständige Pfad für eine Suche verwendet wird.
Mana
Ich habe eine Webanwendung, die MyApp aufruft und example.com/MyApp funktioniert. Wenn Sie jedoch example.com/MyApp/foo besuchen, anstatt in MyApp nach foo-Inhalten zu suchen, wird nach einer Webanwendung gesucht, die "MyApp / foo /" aufruft und nicht sucht Der Inhalt unter MyApp ruft foo ..
2
Versuchen Sie dies: stackoverflow.com/q/11055608/1031900

Antworten:

1

Uralte Frage, aber seitdem ich kürzlich mit dem abschließenden Schrägstrich in Tomcat 8 gekämpft habe, weiß ich, dass die Tomcat-Benutzerwelt weiterhin von Problemen mit dem Schrägstrich geplagt wird. :-)

Was Sie möglicherweise antreffen, sind Änderungen in der Art und Weise, wie Tomcat Weiterleitungen beim Laden des Stammkontexts behandelt. Schauen Sie sich den Fehler 58660 an und lesen Sie einige der Entwicklerdiskussionen. Möglicherweise müssen Sie den Standard-Mapper deaktivieren, indem Sie das mapperContextRootRedirectEnabledAttribut des ContextElements in ändern conf/context.xml.

Peter
quelle
0

Überprüfen Sie Ihre Willkommensliste. Was folgt, sind Spekulationen.

Ich glaube, die Essenz des Problems ist, wenn Tomcat mit einem / dargestellt wird. - Es hat ein paar Optionen. - Über die Begrüßungsdateiliste iterieren. - Wenn nichts da ist. - Verzeichnisliste anzeigen (falls aktiviert).

Hier beginnt der Spaß ... Viele Leute möchten * .do für Dinge wie Streben verwenden. Sie möchten also, dass index.do die Startseite ist. Oder auch häufig ist index.jsp, wobei * .jsp dem JspServlet zugeordnet ist.

Hier wird es lustig. Nehmen wir also an, Ihre Begrüßungsdateien sind index.jsp und index.do.

Was Tomcat (IIRC) tut, iteriert zuerst über die Liste der Willkommensdateien, um nach Ressourcen dieses Namens zu suchen.

Dann wird ein zweiter Durchlauf durchgeführt, um nach passenden Zuordnungen zu suchen. Wenn also index.jsp in der Willkommensliste angegeben und * .jsp zugeordnet ist. Dann wird Tomcat versuchen, auf index.jsp weiterzuleiten, und Sie erhalten eine 404.

Ich gehe also davon aus, dass Sie eine Servlet-Zuordnung und eine Überlappung der Begrüßungsdatei haben. Und das Verhalten dieses Servlets unterstützt GET nicht. (Daher der 405)

Tim Funk
quelle
0

Wenn Ihr Projekt das dynamische Webmodul von Version 2.2 verwendet, müssen Sie explizit mindestens eine Datei (kann eine leere HTML-Datei sein) erstellen, die in der Datei web.xml (z. B. index.html) in Ihrem WebContent enthalten ist.

Snehal
quelle
1
das ist Kommentar; keine Antwort; Bitte überlegen Sie sich in Zukunft einen Kommentar, wenn Sie mehr Punkte bekommen. danke
Hrvoje Špoljar