Ссылка сервлета относительно базы приложения - PullRequest
3 голосов
/ 10 сентября 2011

Я пишу сервлет (в частности, со Скалатрой). В сервлете у меня много ссылок на оглавление, которое включено в каждую страницу. Я хочу, чтобы эти ссылки были относительно базы приложения. Если я использую ссылки, такие как "/ foo", все работает нормально, когда сервлет обслуживается из корня (localhost: 8080 /), но если я работаю с Jetty / Tomcat вместе с другими сервлетами (localhost: 8080 / servlet), ссылка указывает вне сервлета.

Что является хорошим решением для этой проблемы?

1 Ответ

5 голосов
/ 10 сентября 2011

Вам необходимо добавить URL-адрес ссылки с относительным к домену путем, включая контекстный путь, полученный с помощью HttpServletRequest#getContextPath(). Я не делаю Scala, поэтому я не могу дать ответ, нацеленный на Scala, но вот как вы это сделаете в JSP, чтобы изображение было звуковым:

<a href="${pageContext.request.contextPath}/servlet">link</a>

Если текущий путь контекста равен /foo, то вышеприведенное закончится в HTML как

<a href="/foo/servlet">link</a>

Или, если вы генерируете HTML программно, используя Java внутри класса сервлета (что на самом деле плохо, но это не так):

out.println("<a href=\"" + request.getContextPath() + "/servlet\">link</a>");

Альтернативой является установка тега <base> в HTML, чтобы все относительные ссылки относились к нему, см. Также этот ответ для более подробной информации: Браузер не может получить доступ / найти относительные ресурсы, такие как CSS, изображения и ссылки при вызове сервлета, который пересылает в JSP

...