O nome do aplicativo da web (na verdade, o caminho do contexto) está disponível chamando HttpServletrequest#getContextPath()
(e, portanto, NÃO getServletPath()
como sugerido antes). Você pode recuperar isso em JSP por ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Se você pretende usar isso para todos os caminhos relativos em sua página JSP (o que faria essa pergunta mais sentido), você pode usar a <base>
tag 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 os links na página serão, então, automagicamente relativos ao <base>
para que você não precise copiar e colar o caminho do contexto em todos os lugares. Observe que quando os links relativos começam com a /
, eles não serão mais relativos a <base>
, mas sim à raiz do domínio.
ServletContext.getContextPath()
deve ser considerado o caminho de contexto principal ou preferido do aplicativo". Essa foi a razão pela qual incluí esta em minha resposta original, depois de perceber a coisa. Não retirei minha primeira tentativa, pois quero que o OP considere a leitura dos documentos e saiba um pouco mais sobre os métodos relacionados. Espero que você esteja entendendo meu ponto.