Получение относительного пути URL файла внутри включаемого файла, JSP - PullRequest
3 голосов
/ 06 июня 2011

У меня есть файл с именем Main.jsp, расположенный по абсолютному пути URL-адреса "http://Mywebpage.com/Open/This/Folder/Main.jsp".

Внутри Main.jsp, есть jsp:

<%@ include file="../../Top.jsp" %>

Теперь внутриНа странице Top.jsp у меня есть другие операторы jsp и javascript, которые ссылаются на файлы:

<%@ taglib uri="emonogram.tld" prefix="em" %>
...
<script type="text/javascript" src="HL.js"></script>

emonogram.tld и HL.js хранятся в том же каталоге, что и Top.jsp, то есть "http://Mywebpage.com/Open/".

Мне нужно, чтобы Top.jsp был достаточно гибким, чтобы любой файл мог ссылаться на него, независимо от того, где он находится в дереве каталогов.Проблема в том, что я получаю ошибки, потому что файлы, на которые есть ссылки в Top.jsp, не могут быть найдены.Зачем?Путь включения jsp будет относительным путем к Main.jsp.Итак, Top.jsp потерпит неудачу, потому что, когда я вызываю emonogram.tld, я хочу «http://Mywebpage.com/Open/emonogram.tld",, но на самом деле» http://Mywebpage.com/Open/This/Folder/emonogram.tld".

Я попытался просмотреть некоторые параметры jsp, такие как getRequestURL, getServletPath, getRealPath,и getContextPath, но эти методы, похоже, не возвращают то, что я хочу.

Моя текущая логика заключается в том, чтобы получить относительный путь Top.jsp и добавить его к emonogram.tld и HL.js соответственно.Но я не знаю, как это сделать;Я пытаюсь понять это.


Обновление: согласно ответу BalusC, у меня установлены теги и Tomcat 5.5.Я перешел по ссылке и web.xml содержит соответствующую информацию.Я даже обновил до JSP 1.2 и ничего.Если ${} - это всего лишь эквивалент выполнения этого внутри тегов <% %>, то это не ситуация, связанная с созданием или разрывом, и я могу беспокоиться об этом после того, как у меня будет работать оригинальный вопрос.Но спасибо.

Я перешел по этой ссылке и перепробовал все методы, начиная с "get ...", и ни один из них, похоже, не помог.

getContextPath() дает мне /Open в ОБАХ Top.jsp и Main.jsp, хотя Main.jsp находится в / Open / This / Folder /.К сожалению, эта проблема влияет на загрузку "emonogram.tld", которая является библиотекой тегов, а не только файлами javascript.

Еще раз спасибо.

Update2: Мои извинения, большоеорфографическая ошибка;Я имел в виду JSTL 1.2, а не JSP 1.2.Я нахожусь на Tomcat 5.5.28, JSP 2.0 и JSTL 1.2.

Кстати, спасибо за вашу помощь и знания.Это то же самое, что хорошо, даже если скриптлеты не поощряются.С getcontextPath() я ожидаю /Open/This/Folder/ для Main.jsp и /Open/ для Top.jsp, но он возвращает /Open/ для обоих файлов, что довольно странно.Я продолжу расследование и, надеюсь, доберусь до решения, еще раз спасибо.

1 Ответ

13 голосов
/ 06 июня 2011

<script src> относится к текущему URL-адресу запроса (как вы видите в адресной строке браузера), а не к расположению на стороне сервера файла JSP. Именно веб-браузер должен загружать скрипт, а не веб-сервер.

Так, если текущий URL-адрес запроса

http://Mywebpage.com/Open/This/Folder/Main.jsp

и файл JS фактически находится в

http://Mywebpage.com/HL.js

тогда вам нужно ссылаться на него как

<script type="text/javascript" src="/HL.js"></script>

Начальная косая черта будет соответствовать корню домена.

Однако, если ваше веб-приложение развернуто не в корневом каталоге домена как таковом, а в контекстном пути, например /Open в вашем (упрощенном) примере, и ваш файл JS фактически находится в

http://Mywebpage.com/Open/HL.js

, затем вам нужно добавить к URL-адресу HttpServletRequest#getContextPath().

<script type="text/javascript" src="${pageContext.request.contextPath}/HL.js"></script>

Это закончится как (щелкните правой кнопкой мыши страницу в браузере, сделайте Просмотр источника , чтобы увидеть его)

<script type="text/javascript" src="/Open/HL.js"></script>

Смотри также:


Обновление: согласно вашему обновлению, обратите внимание, что это не относится к файлам TLD, поскольку они разрешены на стороне сервера. Как правило, файлы TLD следует помещать в папку /WEB-INF и ссылаться на них по uri="/WEB-INF/filename.tld".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...