如何从JSP请求对象获取基本URL?
以下是完整 URL 的示例:
http://localhost:8080/SOMETHING/index.jsp
我想要的是直到
index.jsp
的部分,在JSP中怎么可能?
那么,您想要基本 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
不会考虑这一点。
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}" />
new URL(request.getScheme(),
request.getServerName(),
request.getServerPort(),
request.getContextPath());
<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!
request.getServerName().toString()
{
}<%=request.isSecure()?"https":"http:"%>