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

时间:2011-06-07 20:15:50

标签: java jsp url servlets

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

6 个答案:

答案 0 :(得分:49)

那么,你想要基本网址吗?您可以按如下方式在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不会考虑这一点。

另见:

答案 1 :(得分: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}" />

答案 2 :(得分:12)

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

答案 3 :(得分: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 !!!

答案 4 :(得分:-3)

而不是完成所有这些,只需这样做:

request.getServerName().toString()

答案 5 :(得分:-3)

只需使用isSecure()

{&LT;%= request.isSecure() “HTTPS”: “HTTP:” 〜%&GT;}