对于 HTML 页面,我只需设置 HTML 的
<base>
标签。每个相对链接(即不以协议或
/
开头的链接)将成为相对于它的链接。无法通过
HttpServletRequest
立即抓取它,因此我们需要在此处使用 JSTL 进行帮助。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="uri">${req.requestURI}</c:set>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
<link rel="stylesheet" href="css/default.css">
<script src="js/default.js"></script>
</head>
<body>
<img src="img/logo.png" />
<a href="other.jsp">link</a>
</body>
</html>
这反过来也有一个注意事项:锚点(#identifier
URL)也将相对于基本路径。如果您有任何锚点,您希望将其相对于请求URL(URI)而不是基本路径。因此,请进行如下更改:
<a href="#identifier">jump</a>
为了
<a href="${uri}#identifier">jump</a>
在JS中,您可以随时从DOM访问<base>
元素,以将相对URL转换为绝对URL。
var base = document.getElementsByTagName("base")[0].href;
如果你使用jQuery的话
var base = $("base").attr("href");
CSS中,图片URL是相对于样式表本身的URL。因此,只需将图像放置在与样式表本身相关的某个文件夹中即可。例如:
/css/style.css
/css/images/foo.png
并将它们作为以下方式的参考。
background-image: url('images/foo.png');
如果你更喜欢将图片放在与CSS文件夹同级别的某个文件夹中,可以这样做。
/css/style.css
/images/foo.png
然后使用../
返回到共同的父文件夹
background-image: url('../images/foo.png');
参见: