获取当前的上下文网址

时间:2014-03-18 11:24:08

标签: java html jsp

我想获取我网站的当前网址。 不是上下文,不是端口,不是方案或协议。只有相对网址。 例如:

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!

2 个答案:

答案 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不考虑这一点。

另见:

Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP

jsp文件:

request.getAttribute("javax.servlet.forward.request_uri")