Как управлять путь к файлу при доступе к другому расположению каталога?

StackOverflow https://stackoverflow.com/questions/3481569

  •  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" />..

Таким образом, если вы измените имя или путь свои папки. вам нужно только изменить конфигурацию

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top