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.
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.MyApp
Tomcat diesen Webanwendungskontext unter Verwendung des verbleibenden Pfadspage/
. Wenn nicht, wird nach demROOT
Kontext gesucht, wobei der vollständige Pfad für eine Suche verwendet wird.Antworten:
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
mapperContextRootRedirectEnabled
Attribut desContext
Elements in ändernconf/context.xml
.quelle
Ü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)
quelle
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.
quelle