要处理我的静态文件(CSS,JS),我必须编写绝对路径,例如/AppName/templates/style/main.css
。有什么解决办法,我可以写相对路径style/main.css
?
要处理我的静态文件(CSS,JS),我必须编写绝对路径,例如/AppName/templates/style/main.css
。有什么解决办法,我可以写相对路径style/main.css
?
Answers:
如果您真正关心的是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基础相关。您将在每个其他Web服务器中遇到相同的问题。
<c:out>
。顺便说一句,成为一个完全无知的人并拥有非常传统的软件并不是拒绝投票的合理理由。
只需将<c:url>
-tag与应用程序上下文相对路径一起使用。
当value
参数以开头时/
,标记会将其视为应用程序相对网址,并将应用程序名称添加到该网址。例:
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,具有域相对网址:
<link rel="stylesheet" href="/AppName/templates/style/main.css" />
...
<a href="/AppName/home">home link</a>
代替使用整个链接,我们可以进行以下操作(解决方案涉及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>
style/main.css
应该起作用。可能在某些地方并没有,但是如果您没有告诉别人您实际上正在尝试做什么,那么人们是否可以帮助您将是很失败的。