Я разрабатываю веб-приложение с tomcat. В среде разработки корневой адрес приложения localhost:8080/myapp/
. В производстве корневой адрес www.myapp.com/
.
Когда я использую на своем веб-сайте относительную ссылку, например /home
, он отлично работает в производственной среде, но адрес, по которому я пришел в своем разработчике, localhost:8080/home
, который удаляет корень приложения. Очевидно, я не могу просто использовать home
, поскольку он будет работать в первый раз, но просто присоединится к концу адресной строки. Я также не могу использовать файл hosts, и я не знаю, как создать псевдоним или просто перенаправить трафик с какого-то псевдонима на localhost:8080/myapp/
.
Это кажется очень распространенной проблемой. Заранее спасибо!
На самом деле решение находится в коде ваших веб-страниц, а не в какой-либо конфигурации, которую вы можете сделать. Предполагая, что вы используете JSP для генерации своего HTML, вам нужно изменить ссылки следующим образом:
<a href="/home">a link to the root of my webapp</a>
Чтобы выглядеть так:
<a href="<%= response.encodeURL(request.getContextPath() + "/home") %>">
a link to the root of my webapp
</a>
Request.getContextPath - это настоящая магия здесь: он всегда возвращает префикс, который принадлежит вашему веб-приложению, независимо от того, какой это. Для веб-приложения ROOT он вернет "" (пустая строка). Для другого он может вернуть «/ foo / bar» (если ваше веб-приложение было развернуто как foo # bar.war).
Response.encodeURL добавит идентификатор сеанса к вашему URL-адресу, если клиент не использует файлы cookie, поэтому сеансы будут работать, когда файлы cookie недоступны.
Если вы используете какой-либо другой фреймворк для генерации контента (Velocity, Freemarker и т. Д.), Существуют аналогичные способы достижения того же, что и в этих фреймворках.