web-dev-qa-db-fra.com

comment obtenir l'url de base de l'objet de demande jsp?

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?

29
Maverick

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.

Voir également:

50
BalusC

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}" />
18
hfmanson
new URL(request.getScheme(), 
        request.getServerName(), 
        request.getServerPort(), 
        request.getContextPath());
12
Bozho

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 !!!

0
Sujit Joshi