Назад | Перейти на главную страницу

Не могу использовать относительные ссылки в моей среде разработки tomcat

Я разрабатываю веб-приложение с 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 и т. Д.), Существуют аналогичные способы достижения того же, что и в этих фреймворках.