Tomcat может запускать множество веб-приложений одновременно. Рассмотрим сценарий:
- Кот работает на 8080
- В папке веб-приложений tomcat работают три приложения.
- appA.war
- appB.war
- ROOT.war
URL http://localhost:8080/ будет получать запрос к tomcat, и tomcat должен решить, какое из трех приложений должно обслуживать запрос, так как URL не идентифицирует приложение, запрос будет перенаправлен tomcat на ROOT.war. который является корневым веб-приложением в Tomcat.
Если у вас есть JSP в appA.war с <a href="/otherSite">link</a>
, тогда веб-браузер, который анализирует выходные данные, будет считать, что запрос должен быть отправлен в корневой каталог сервера, поскольку href начался с /, поэтому браузер помещает togethec URL-адрес http://localhost:8080/otherSite, когда запрос получает tomcat, tomcat предполагает, что / otherSite ссылается на веб-приложение под названием otherSite.war, но, конечно, его там нет.
если вы используете <a href="otherSite">link</a>
, браузер предположит, что это относительный URL-адрес, и отправит запрос на http://localhost:8080/appA/otherSite, поскольку страница, генерирующая URL, была предоставлена вне контекста http://localhost:8080/appA
Таким образом, в общем, вам нужно убедиться, что URL-адреса со страницы JSP являются относительными или что вы добавляете имя контекста к сгенерированному URL, это то, что делают теги <spring:url />
и <c:url />
.
есть ли связь между URL на локальном сервере Tomcat и
URL, который будет иметь веб-приложение, когда оно будет опубликовано?
URL-адрес для контекста совпадает с именем файла war в папке webapps tomcat, если вы не измените его в файле server.xml или в файле context.xml.