Comment obtenir l'URL de base de l'objet de demande jsp? http: // localhost: 8080/SOMETHING/index.jsp , mais je veux la partie jusqu'à index.jsp, comment est-ce possible en jsp?
Donc, vous voulez l'URL de base ? Vous pouvez l'obtenir dans une servlet comme suit:
String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
// ...
Ou dans un JSP, comme <base>
, avec peu d'aide de 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>
Notez que cela n'inclut pas le numéro de port lorsqu'il est déjà le numéro de port par défaut, tel que 80. Le Java.net.URL
n'en tient pas compte.
Variante JSP de la réponse de Bozho:
<%@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());
Il y a cependant une faille majeure dans la réponse acceptée de @BalusC. La sous-chaîne doit commencer à partir de 0 et non 1. Au lieu de
<base href="${fn:replace(req.requestURL, fn:substring(uri, 1, fn:length(uri)), req.contextPath)}" />
cA devrait etre
<base href="${fn:replace(req.requestURL, fn:substring(uri, 0, fn:length(uri)), req.contextPath)}" />
Avec 1, vous obtenez une double barre oblique: http://localhost:8080//appcontext/
Avec 0, vous obtenez, http://localhost:21080/appcontext/
Dans mon application, request.getSession (false) renvoyait toujours null quand il se terminait par une double barre oblique !!!