Как получить базовый url из объекта запроса jsp? http://localhost:8080/SOMETHING/index.jsp, но мне нужна часть до index.jsp, как это возможно в jsp?
Как получить базовый url из объекта запроса jsp?
Ответ 1
Итак, вам нужен базовый URL-адрес? Вы можете получить его в сервлет следующим образом:
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
не учитывает это.
См. также:
Ответ 2
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}" />
Ответ 3
new URL(request.getScheme(),
request.getServerName(),
request.getServerPort(),
request.getContextPath());
Ответ 4
Есть один главный недостаток в принятом ответе @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, когда заканчивался двойной слэш!!!
Ответ 5
Вместо того, чтобы все это делать, просто сделайте следующее:
request.getServerName().toString()
Ответ 6
просто используйте isSecure()
{<% = request.isSecure() "HTTPS": "HTTP:" % > }