2011-10-06 22 views
7
<c:url var="myUrl" value="/MyPath/${MyID}"/> 

que luego utilizo después (para permitir a los usuarios copiar los enlaces):Acceso a la URL completa, incluyendo el nombre de host con jstl

<input size="35" disabled value="${myUrl}" /> 

y se nota

/my-app-name/MyPath/23 

sin embargo lo quiero ser

http://myHost/my-app-name/MyPath/23 

Puedo anteponer la cadena segura, pero quería una manera para obtener activamente el nombre de host correcto ...?

+2

Nota: Recuerde que obtener activamente el nombre de host le dará el nombre de host que se utilizó para llegar a su servidor. Si se trata de una aplicación detrás de un reverseProxy (por ejemplo, una solicitud de reencaminamiento de Apache para su servidor de aplicaciones), no tendrá el nombre de host que el usuario vea. – helios

Respuesta

22

lo necesario para preparar usted mismo basado en HttpServletRequest#getRequestURL() y un poco de ayuda de JSTL functions:

<c:set var="req" value="${pageContext.request}" /> 
<c:set var="baseURL" value="${fn:replace(req.requestURL, fn:substring(req.requestURI, 1, fn:length(req.requestURI)), req.contextPath)}" /> 
... 
<c:url var="myUrl" value="${baseURL}/${MyID}"/> 
+0

que fue rápido, sin embargo, le dará una oportunidad. – NimChimpsky

+0

en tomcat 7.0.52, tuve que cambiar el comienzo de la subcadena de 1 a 0: 'fn: subserie (req.requestURI, 0, fn: length (req.requestURI)), etc.' – cthiebaud

+3

incluso mejor, en tomcat 7.0.52, basicURL simplificado funciona para mí: '' – cthiebaud

7

HttpServletRequest objeto tiene todos los detalles:

  • getProtocol
  • getServerName
  • getContextPath

por lo que creo que puede utilizar:

${request.protocol} :// ${request.serverName} ${request.contextPath} /etc 

para construir lo que desea.

+4

y también el puerto :) – helios

+2

Solo terminaría en un torpe flujo lógico if-else para ocultar el puerto cuando ya sea el puerto predeterminado para el protocolo dado. Es más fácil de construir basado en 'getRequestURL()'. Además, 'getServerName()' es manipulable por el cliente a través del encabezado de solicitud 'Host', no confiaría en esto. – BalusC

+0

Ok. No pensé en esconder el puerto. No fui al camino getRequestURL porque OP deseaba cambiar la URL. Una pregunta. No entendí la manipulación del nombre del servidor. ¿Es eso si el cliente envía un Host: www.other.com que entrará en nuestra URL construida? – helios

Cuestiones relacionadas