Затем просто обратитесь к корневой переменной на вашей странице:

аботы моего статического файла (CSS, JS) я должен написать абсолютный путь, как/AppName/templates/style/main.css, Есть ли решение, что я мог бы написать относительный путь, какstyle/main.css?

 T.J. Crowder21 янв. 2011 г., 23:27
Почему (игде) вам нужно написать полный путь? Почти везде, где я могу думать,style/main.css должно сработать. Вполне возможно, что есть места, где этого нет, но без того, чтобы вы не рассказывали людям, что вы на самом деле пытаетесь сделать, будет очень непросто, смогут ли люди вам помочь.
 kspacja22 янв. 2011 г., 04:04
Я просто хочу связать файл CSS с моей страницей JSP. Я не писал объяснения, потому что это было самое простое и единственное использование, которое я могу изобразить, поэтому я думаю, что все догадаются. Даже так: прости. Виноват...

Ответы на вопрос(6)

Это можно сделать проще:

<base href="${pageContext.request.contextPath}/"/>

Все URL будут сформированы без лишнихdomain:port но с контекстом приложения.

<c:url>-тег с относительным путем контекста приложения.

Когдаvalue параметр начинается с/, затем тег будет относиться к нему как к относительному URL приложения и добавит имя приложения к URL. Пример:

JSP:

<c:url value="/templates/style/main.css" var="mainCssUrl" />`
<link rel="stylesheet" href="${mainCssUrl}" />
...
<c:url value="/home" var="homeUrl" />`
<a href="${homeUrl}">home link</a>

станет этим HTML, с относительным URL домена:

<link rel="stylesheet" href="/AppName/templates/style/main.css" />
...
<a href="/AppName/home">home link</a>
Решение Вопроса

Если твойфактический проблема заключается в динамичности контекста веб-приложения (часть «AppName»), а затем просто извлекайте его динамически с помощьюHttpServletRequest#getContextPath().

<head>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/templates/style/main.css" />
    <script src="${pageContext.request.contextPath}/templates/js/main.js"></script>
    <script>var base = "${pageContext.request.contextPath}";</script>
</head>
<body>
    <a href="${pageContext.request.contextPath}/pages/foo.jsp">link</a>
</body>

Если вы хотите установить базовый путь для всех относительных ссылок, чтобы вам не нужно было повторять${pageContext.request.contextPath} вкаждый относительная ссылка, используйте<base> тег. Вот пример с помощьюФункции JSTL.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<head>
    <c:set var="url">${pageContext.request.requestURL}</c:set>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(pageContext.request.requestURI))}${pageContext.request.contextPath}/" />
    <link rel="stylesheet" href="templates/style/main.css" />
    <script src="templates/js/main.js"></script>
    <script>var base = document.getElementsByTagName("base")[0].href;</script>
</head>
<body>
    <a href="pages/foo.jsp">link</a>
</body>

Таким образом, каждая относительная ссылка (т.е.не начиная с/ или схема) станет относительно<base>.

Кстати, это никак не связано с Tomcat. Это просто связано с основами HTTP / HTML. У вас будет такая же проблема на любом другом веб-сервере.

Смотрите также:Браузер не может получить доступ / найти относительные ресурсы, такие как CSS, изображения и ссылки, при вызове сервлета, который пересылает в JSPРекомендуется ли использовать тег <base> html?
 BalusC17 июл. 2013 г., 23:29
@Matt: обновление до версии JSP 2.0 (выпущенной десять лет назад). В качестве альтернативы используйте<c:out>, Быть полностью невежественным и иметь очень унаследованное программное обеспечение не является справедливой причиной, чтобы понизить голос, между прочим.
 BalusC21 янв. 2014 г., 08:04
@Vnge: просто позволить JSP напечатать его как переменную JS?
 shareef06 июн. 2013 г., 10:15
я не использую pageContext.request.contextPath и не вижу, когда мне это действительно нужно, я могу изменить свойства проекта в netbeans для контекста. Можете ли вы объяснить больше?
 BalusC25 янв. 2016 г., 16:28
@Natix: перерыв? Этоintented как базовый URL всех относительных URL. Смотрите такжеstackoverflow.com/a/1889957 Просто не используйте его, если он не соответствует вашей технической реализации.
 MegaMatt17 июл. 2013 г., 23:12
$ {pageContext ... не работает для меня. Просто генерирует что-то вроде localhost: 8080 / profile / $% 7BpageContext.request.context% 7D / css / profile /

используя полную ссылку, мы можем сделать, как показано ниже (решение касается файлов JSP)

С помощью JSTL мы можем сделать это следующим образом: Чтобы связать ресурс как css, js:

     <link rel="stylesheet" href="${pageContext.request.contextPath}/style/sample.css" />
     <script src="${pageContext.request.contextPath}/js/sample.js"></script>   

Чтобы просто сделать ссылку:

     <a id=".." class=".." href="${pageContext.request.contextPath}/jsp/sample.jsp">....</a>

Стоит познакомиться с тегами

   <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Есть также метод jsp, чтобы сделать это, как показано ниже, но лучше, как выше:

   <link rel="stylesheet" href="<%=request.getContextPath()%>/style/sample.css" />
   <script type="text/javascript" src="<%=request.getContextPath()%>/js/sample.js"></script>

Чтобы просто сделать ссылку:

   <a id=".." class=".." href="<%=request.getContextPath()%>/jsp/sample.jsp">....</a>

которое я использовал. Добавитьc:url к вершине вашего JSP.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value="/" var="root" />

Затем просто обратитесь к корневой переменной на вашей странице:

<link rel="stylesheet" href="${root}templates/style/main.css">

ля tomcat. Вы можете указать любой путь относительно этого $ cwd.

Предположим, у вас есть

home
- tomcat
 |_bin
- cssStore
 |_file.css

И предположим, что вы запускаете tomcat из ~ / tomcat, используя команду "bin / startup.sh".

~ / tomcat становится домашним каталогом ($ cwd) для tomcat

Вы можете получить доступ к "../cssStore/file.css" из файлов классов в вашем сервлете прямо сейчас

Надеюсь, что поможет, - М.С.

Ваш ответ на вопрос