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

问题描述 投票:0回答:6

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

以下是完整 URL 的示例:

http://localhost:8080/SOMETHING/index.jsp

我想要的是直到

index.jsp
的部分,在JSP中怎么可能?

java jsp url servlets
6个回答
56
投票

那么,您想要基本 URL?您可以按如下方式在 servlet 中获取它:

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

或者在 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>

请注意,当端口号已经是默认端口号(例如 80)时,这不包括端口号。

java.net.URL
不会考虑这一点。

另请参阅:


18
投票

Bozho's 答案的 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}" />
    

14
投票
new URL(request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath());
    

0
投票
@BalusC 接受的答案有一个重大缺陷。子串应该从 0 开始,而不是 1。而不是

<base href="${fn:replace(req.requestURL, fn:substring(uri, 1, fn:length(uri)), req.contextPath)}" />

应该是

<base href="${fn:replace(req.requestURL, fn:substring(uri, 0, fn:length(uri)), req.contextPath)}" />

使用 1 你会得到双正斜杠:

http://localhost:8080//appcontext/

0 就可以了,
http://localhost:21080/appcontext/


在我的应用程序中,request.getSession(false) 当以双斜杠结尾时总是返回 null!


-3
投票
不用做所有这些,只需这样做:

request.getServerName().toString()
    

-3
投票
只需使用 isSecure()

{

}<%=request.isSecure()?"https":"http:"%>

© www.soinside.com 2019 - 2024. All rights reserved.