El nombre de la aplicación web (en realidad, la ruta de contexto) está disponible llamando HttpServletrequest#getContextPath()
(y, por lo tanto, NO getServletPath()
como se sugirió anteriormente). Puede recuperar esto en JSP mediante ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Si tiene la intención de usar esto para todas las rutas relativas en su página JSP (lo que haría que esta pregunta tuviera más sentido), puede hacer uso de la <base>
etiqueta 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>
Todos los enlaces de la página serán automáticamente relativos a los de <base>
modo que no necesite copiar y pegar la ruta de contexto en todas partes. Tenga en cuenta que cuando los enlaces relativos comienzan con a /
, ya no serán relativos a los <base>
, sino a la raíz del dominio.
ServletContext.getContextPath()
debe considerarse como la ruta de contexto principal o preferida de la aplicación". Esa fue la razón por la que incluí este en mi respuesta original, después de darme cuenta de la cosa. No eliminé mi primer intento, ya que quiero que el OP considere leer los documentos y sepa un poco más sobre los métodos relacionados. Espero que entiendas mi punto.