Как управлять путь к файлу при доступе к другому расположению каталога?
-
28-09-2019 - |
Вопрос
У меня мало веб-страниц, сидящих в разных каталогах, и моя цель - иметь какую-то организованную структуру, чтобы я мог получить доступ к файлам JS или CSS без жесткого образования пути.
Например, структура каталога:
root --- js --- some.js
|
|--css --- some.css
|
|---pages ---- main.jsp
|
|---other----foo---- foo.jsp
|
|--bar --- bar.jsp
Тогда main.jsp и foo.jsp пытаются ссылаться на некоторые.js, но должен иметь разные пути.
( main.jsp )
<script type="text/javascript" src="../js/some.js"></script>
( foo.jsp)
<script type="text/javascript" src="../../js/some.js"></script>
Это не идеально, если я хочу изменить местоположение main.jsp или foo.jsp, я должен вернуться к каждому файлу и изменять путь вручную.
Я думаю, что есть заводский класс, который имеет полный путь для каждой файлы, чтобы он выглядел бы что-то вроде:
<script type="text/javascript" src=<% Factory.getFullPath(some.js) %> ></script>
В этом случае я все еще могу свободно перемещать файлы и не приходится возвращаться к каждому файлу.
Могу ли я получить какое-то мнение моему подходу? Есть ли другой способ решить это?
Решение
Используйте контекстно-относительный путь. Это сделает путь абсолютным корнем домена. Вы можете получить контекстный путь HttpServletRequest#getContextPath()
. Отказ В JSP, HttpServletRequest
доступен ${pageContext.request}
.
<script type="text/javascript" src="${pageContext.request.contextPath}/js/some.js"></script>
(то contextPath
Сама уже начинается с /
, Так что вам не нужно префиснуть его самостоятельно)
Вы также можете установить его, используя HTML <base>
Тег так что каждый Относительный URL на странице становится относительным к нему. Таким образом, вам не нужно копировать ${pageContext.request.contextPath}
над всем местом.
<base href="${pageContext.request.contextPath}"></base>
<script type="text/javascript" src="js/some.js"></script>
Это, однако, одно предупреждение: якоря, как <a href="#foo">
также станет относительно этого. Вам нужно учитывать это, если вы идете на это.
Смотрите также:
Другие советы
mm Я не совсем уверен, что фабрика является наиболее подходящим способом сделать это, может быть, это будет работать .. Я помню, что для этого я использовал интерфейс, где я реализовал некоторые константы, включая путь к папке JS и CSS
public interface Configuration {
public static final String SERVER_URL = "http://localhost:8080/";
public static final String CSS_URL = SERVER_URL + "css/";
public static final String JS_URL = SERVER_URL + "js/";
}
И тогда мне придется импортировать этот интерфейс в сервлете и назвать так:
...src="<% Configuration.JS_URL %>some.js" />..
Таким образом, если вы измените имя или путь свои папки. вам нужно только изменить конфигурацию