Как управлять путем к файлу при доступе из другого каталога? - PullRequest
2 голосов
/ 14 августа 2010

У меня есть несколько веб-страниц, расположенных в разных каталогах, и моя цель состоит в том, чтобы иметь какую-то организованную структуру, чтобы я мог получить доступ к файлам js или css без жесткого указания пути.

Например, структура каталоговis:

root --- js --- some.js
      |
      |--css --- some.css
      |
      |---pages ---- main.jsp
      |
      |---other----foo---- foo.jsp
                 |
                 |--bar --- bar.jsp  

Затем main.jsp и foo.jsp пытаются сослаться на some.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>

В этом случае я по-прежнему могу свободно перемещать файлы и не возвращаться к каждому файлу.

Могу ли я получить какое-то мнение о своем подходе?Есть ли другой способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Использовать контекстно-относительный путь. Это сделает путь к корню домена абсолютным. Вы можете получить контекстный путь по 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">, также станут относительно него. Вы должны принять это во внимание также, если вы идете на это.

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

1 голос
/ 14 августа 2010

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

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

...