如何从jsp请求对象获取基本URL?

Mav*_*ick 29 java url jsp servlets

如何从jsp请求对象获取基本URL? http:// localhost:8080/SOMETHING/index.jsp,但我希望部分直到index.jsp,在jsp中怎么可能?

Bal*_*usC 51

那么,你想要基本URL?您可以在servlet中获取它,如下所示:

String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
// ...
Run Code Online (Sandbox Code Playgroud)

或者在JSP中,<base>在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>
Run Code Online (Sandbox Code Playgroud)

请注意,当端口号已经是默认端口号时,这不包括端口号,例如80. java.net.URL不考虑这一点.

也可以看看:


hfm*_*son 18

Bozho答案的JSP变种:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="baseURL" value="${req.scheme}://${req.serverName}:${req.serverPort}${req.contextPath}" />
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 12

new URL(request.getScheme(), 
        request.getServerName(), 
        request.getServerPort(), 
        request.getContextPath());
Run Code Online (Sandbox Code Playgroud)

  • 请注意,即使默认端口号(http + 80和https + 443)仍包含最终结果中的端口号.这并不总是令人满意的,当然,如果要在某个重定向URL或`<base>`URL中使用URL,请不要这样做. (2认同)