我想获取我网站的当前网址。 不是上下文,不是端口,不是方案或协议。只有相对网址。 例如:
https://www.myurl.com/context/relative/url/site.mvc
我希望:
/relative/url/site.mvc
${pageContext.request.contextPath}
给了我:/context/
${pageContext.request.requestURL}
给了我https://www.myurl.com/context/WEB-INF/tiles/relative/url/site/center.jsp
那就是网站在我的目录中的位置。
但我想要网站的相对路径......没有Javascript!
答案 0 :(得分:2)
谢谢@jmail。
你的发言使我走上正轨。但我不想要基本网址,但解决方案是:
<c:set var="currentUrl" value="${pageContext.request.request.getAttribute('javax.servlet.forward.request_uri')}"/>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>
<c:forEach items="${paramValues}" var="paramItem">
<c:set var="urlParams" value="${urlParams}&${paramItem.key}=${paramItem.value[0]}"/>
</c:forEach>
<c:set var="urlParams" value="${fn:substring(urlParams, 1, fn:length(urlParams))}" />
<c:set var="relativeUrl" value="${fn:substring(currentUrl, fn:length(contextPath), fn:length(currentUrl))}?${urlParams}" />
您忘记了参数,并且您的版本提取了基础,而不是相对路径!
答案 1 :(得分:1)
那么,您想要基本URL吗?您可以按如下方式在servlet中获取它:
String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
// ...
或者在JSP中,在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" value="${req.requestURI}" />
...
<head>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
</head>
请注意,当端口号已经是默认端口号时,这不包括端口号,例如80. java.net.URL不考虑这一点。
另见:
jsp文件:
request.getAttribute("javax.servlet.forward.request_uri")