Le nom de l'application Web (en fait le chemin du contexte) est disponible en appelant HttpServletrequest#getContextPath()
(et donc PAS getServletPath()
comme suggéré précédemment). Vous pouvez le récupérer dans JSP par ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Si vous avez l'intention de l'utiliser pour tous les chemins relatifs de votre page JSP (ce qui donnerait plus de sens à cette question), vous pouvez utiliser la <base>
balise HTML :
<%@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}" />
<!doctype html>
<html lang="en">
<head>
<title>SO question 2204870</title>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/">
<script src="js/global.js"></script>
<link rel="stylesheet" href="css/global.css">
</head>
<body>
<ul>
<li><a href="home.jsp">Home</a></li>
<li><a href="faq.jsp">FAQ</a></li>
<li><a href="contact.jsp">Contact</a></li>
</ul>
</body>
</html>
Tous les liens de la page seront alors automatiquement relatifs au <base>
afin que vous n'ayez pas besoin de copier le chemin de contexte partout. Notez que lorsque les liens relatifs commencent par a /
, ils ne seront plus relatifs à la <base>
, mais à la racine du domaine.
ServletContext.getContextPath()
doit être considéré comme le chemin de contexte principal ou préféré de l'application". C'est la raison pour laquelle j'ai inclus celui-ci dans ma réponse originale, après avoir réalisé la chose. Je n'ai pas supprimé ma première tentative, car je souhaite que l'OP envisage de lire la documentation et d'en savoir un peu plus sur les méthodes associées. J'espère que vous comprenez mon point.getServletPath()
retours/filename.jsp
. Le PO ne demandait pas du tout cela, ce n'est certainement pas la voie à suivre.<base>
tag? Toutes les balises ne devraient-elles pas être fermées?Jetez un œil à la documentation de
HttpServletRequest
.Pour créer l'URL de votre exemple, vous devrez utiliser:
getScheme()
getServerName()
getServerPort()
getContextPath()
Voici une méthode qui retournera votre exemple:
la source
request.getLocalAddr()
getContextPath()
dans la méthode ne renvoie rien! EtgetServerPort()
ne renvoie qu'un nombre à 2 chiffres, pas un nombre à 4 chiffres! Pourrais-je avoir de l'aide à ce sujet?Le nom de l'application provient de
getContextPath
.Je trouve ce graphique de l' Agile Software Craftsmanship HttpServletRequest Path Decoding trie toutes les différentes méthodes disponibles:
la source
Je vous suggère fortement de lire les documents , pour des méthodes similaires. Si vous êtes intéressé par le chemin de contexte, regardez ici, ServletContext.getContextPath () .
la source
Le code suivant peut être utile pour les applications Web utilisant JavaScript.
la source
Si une URL vous est transmise sous forme de chaîne et que vous souhaitez extraire la racine de contexte de cette application, vous pouvez utiliser cette expression régulière pour l'extraire. Cela fonctionnera pour les URL complètes ou relatives qui commencent par la racine du contexte.
la source