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.getServletPath()
devoluciones/filename.jsp
. El OP no estaba pidiendo eso en absoluto, ciertamente este no es el camino a seguir.<base>
etiqueta? ¿No deberían cerrarse todas las etiquetas?Eche un vistazo a la documentación de
HttpServletRequest
.Para construir la URL en su ejemplo, necesitará usar:
getScheme()
getServerName()
getServerPort()
getContextPath()
Aquí hay un método que devolverá su ejemplo:
fuente
request.getLocalAddr()
getContextPath()
en el método no devuelve nada! ¡YgetServerPort()
devuelve solo un número de 2 dígitos, no un número de 4 dígitos! ¿Podría ayudarme?El nombre de la aplicación proviene
getContextPath
.Encuentro que este gráfico de Agile Software Craftsmanship HttpServletRequest Path Decoding clasifica todos los diferentes métodos que están disponibles:
fuente
Le sugiero encarecidamente que lea los documentos , para métodos similares. Si está interesado en la ruta de contexto, eche un vistazo aquí, ServletContext.getContextPath () .
fuente
El siguiente código puede resultar útil para aplicaciones web que utilizan JavaScript.
fuente
Si se le pasa una URL como una cadena y desea extraer la raíz de contexto de esa aplicación, puede usar esta expresión regular para extraerla. Funcionará para URL completas o URL relativas que comiencen con la raíz de contexto.
fuente