tag que lib internet etiquetas entre ejemplos dominios dominio direccion diferencia jsp base-url

jsp - que - tag lib java



¿Cómo obtener la URL del dominio y el nombre de la aplicación? (6)

Aquí está el escenario.

Mi aplicación web Java tiene la siguiente ruta

https://www.mywebsite.com:9443/MyWebApp

Digamos que hay un archivo JSP

https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp

y necesito recuperar

https://www.mywebsite.com:9443/MyWebApp

dentro de este archivo JSP.

Por supuesto, hay una forma bastante vaga y tonta de simplemente obtener la URL y luego volver a rastrear la ruta de regreso.

¿Pero hay una forma programática de hacer esto? Específicamente, creo que puedo obtener el dominio + puerto, pero ¿cómo puedo recuperar el nombre de la aplicación "MyWebApp"?


Eche un vistazo a la documentación de HttpServletRequest .
Para construir la URL en su ejemplo, deberá usar:

  • getScheme()
  • getServerName()
  • getServerPort()
  • getContextPath()

Aquí hay un método que devolverá su ejemplo:

public static String getURLWithContextPath(HttpServletRequest request) { return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); }



El nombre de la aplicación web (en realidad, la ruta de contexto) está disponible llamando a HttpServletrequest#getContextPath() (y por lo tanto NO a getServletPath() como se sugirió anteriormente). Puede recuperar esto en JSP por ${pageContext.request.contextPath} .

<p>The context path is: ${pageContext.request.contextPath}.</p>

Si tiene la intención de utilizar esto para todas las rutas relativas en su página JSP (lo que haría que esta pregunta tenga más sentido), puede utilizar la etiqueta HTML <base> :

<%@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 en la página serán automágicamente relativos a la <base> para que no sea necesario copiar la ruta del contexto en todas partes. Tenga en cuenta que cuando los enlaces relativos comienzan con un / , ya no serán relativos a <base> , sino a la raíz del dominio.


El siguiente código puede ser útil para la aplicación web que usa JavaScript.

var newURL = window.location.protocol + "//" + window.location.host + "" + window.location.pathname; newURL = newURL.substring(0,newURL.indexOf(""));


Le sugiero encarecidamente que lea los docs para obtener métodos similares. Si está interesado en la ruta del contexto, eche un vistazo aquí, ServletContext.getContextPath() .


Si le pasan una url como cadena y desea extraer la raíz de contexto de esa aplicación, puede usar esta expresión regular para extraerla. Funcionará para las URL completas o las URL relativas que comiencen con la raíz de contexto.

url.replaceAll("^(.*//////)?.*?///(.+?)///.*|///(.+)$", "$2$3")