cómo obtener la url base del objeto de solicitud jsp?

¿Cómo obtener la url base del objeto de solicitud jsp? http: // localhost: 8080 / SOMETHING / index.jsp , pero quiero la parte para index.jsp, ¿cómo es posible en jsp?

Entonces, ¿quieres la URL base ? Puede obtenerlo en un servlet de la siguiente manera:

String url = request.getRequestURL().toString(); String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/"; // ... 

O en un JSP, como , con poca ayuda de JSTL:

 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>  ${req.requestURL}  ...    

Tenga en cuenta que esto no incluye el número de puerto cuando ya es el número de puerto predeterminado, como 80. java.net.URL no tiene esto en cuenta.

Ver también:

  • El navegador no puede acceder / encontrar recursos relativos como CSS, imágenes y enlaces cuando llama a un servlet que lo reenvía a un JSP

Variante JSP de la respuesta de Bozho:

 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
 new URL(request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath()); 

Sin embargo, hay un gran error en la respuesta aceptada de @BalusC. La subcadena debe comenzar desde 0 y no 1. En lugar de

  

debería ser

  

Con 1 obtienes doble barra diagonal: http://localhost:8080//appcontext/ Con 0 obtienes, http://localhost:21080/appcontext/

En mi aplicación, request.getSession (false) siempre devolvía null cuando terminaba en doble barra !!!

En lugar de hacer todo eso, solo haz esto:

 request.getServerName().toString() 

solo use isSecure ()

{<% = request.isSecure ()? "https": "http:"%>}