Как использовать относительные пути без включения корневого имени контекста?



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

645   6  

6 ответов:

если фактический беспокойство-это динамичность контекста webapp (часть" 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. У вас будет такая же проблема на каждом другом веб-сервере.

Читайте также:

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

когда

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

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

home
- tomcat
 |_bin
- cssStore
 |_file.css

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

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

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

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

вместо этого, используя всю ссылку, мы можем сделать, как показано ниже (решение касается файлов 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>

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

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

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

это производная от предложения @Ralph, которое я использую. Добавьте 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">

Comments

    Ничего не найдено.