Как получить базовый URL из объекта запроса JSP? - PullRequest
29 голосов
/ 08 июня 2011

Как получить базовый URL из объекта запроса jsp? http://localhost:8080/SOMETHING/index.jsp, но я хочу часть до index.jsp, как это возможно в jsp?

Ответы [ 6 ]

50 голосов
/ 08 июня 2011

Итак, вы хотите базовый 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 не учитывает это.

См. также:

18 голосов
/ 22 мая 2013

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}" />
12 голосов
/ 08 июня 2011
new URL(request.getScheme(), 
        request.getServerName(), 
        request.getServerPort(), 
        request.getContextPath());
0 голосов
/ 12 сентября 2013

В принятом ответе @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) всегда возвращал ноль, когда заканчивался двойной косой чертой !!!

0 голосов
/ 16 апреля 2013

просто используйте isSecure ()

{<% = request.isSecure () "HTTPS": "HTTP:" %>}

0 голосов
/ 31 января 2012

Вместо того, чтобы делать все это, просто сделайте это:

request.getServerName().toString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...