2011-05-01 34 views
27

Tengo una aplicación web, en la que tengo diferentes etiquetas de navegación de anclaje tales como Inicio, Perfil, etc

Lo que quiero:

Cuando presiono etiquetas de anclaje como el hogar o perfil. Solo quiero asegurarme de que el usuario actual obtenga su información en esa página de etiquetas/JSP.

Muestra Ejemplo que estoy tratando:

<a href="${pageContext.request.contextPath}/JSPAddress.jsp">Profile</a> 
+7

Coloque su mouse sobre la etiqueta '[el]' y haga clic en el enlace de "información" en la ventana emergente. – BalusC

Respuesta

55

El pageContext es un objeto implícito disponible en las páginas JSP. The EL documentation dice

Contexto para la página JSP. Proporciona acceso a varios objetos incluyendo:
ServletContext: ...
sesión: ...
solicitud: ...
respuesta: ...

Por lo tanto esta expresión obtendrá el actual objeto HttpServletRequest y obtenga el context path para la solicitud actual y anexe /JSPAddress.jsp para crear un enlace (que funcionará incluso si se accede a la ruta de contexto de este recurso en los cambios).

El propósito principal de esta expresión sería mantener los vínculos "relativos" al contexto de la aplicación y aislarlos de los cambios en la ruta de la aplicación.


Por ejemplo, si se accede a su JSP (llamado thisJSP.jsp) en http://myhost.com/myWebApp/thisJSP.jsp, thecontext camino será myWebApp. Por lo tanto, el enlace href generado será /myWebApp/JSPAddress.jsp.

Si algún día decide implementar el JSP en otro servidor con la ruta de contexto corpWebApp, la href generada para el enlace cambiará automáticamente a /corpWebApp/JSPAddress.jsp sin ningún trabajo de su parte.

+1

cuál es la diferencia entre '$ {pageContext.request.contextPath}' y '$ {request.contextPath}'? – MeBigFatGuy

+9

@MeBigFatGuy No creo que 'request' sea un objeto implícito en el EL (aunque hay un' requestScope') - la manera de obtener una referencia a la instancia de solicitud es a través del 'pageContext' como en el fragmento de OPs. –

0

use request.getContextPath() en lugar de ${pageContext.request.contextPath} en lenguaje de expresión JSP.

<% 
String contextPath = request.getContextPath(); 
%> 
out.println(contextPath); 

de salida: willPrintMyProjectcontextPath

+4

Se desaconsejan los fragmentos y ya no se deben usar. El lenguaje de expresión es la forma correcta de hacerlo, y lo ha sido durante mucho tiempo. – KjetilNordin

+0

@KjetilNordin aún es útil saber que desde un scriptlet tienes que hacer 'request.getContextPath()' y no 'pageContext.getRequest(). GetContextPath()' que sería la traducción ingenua de JSP a scriptlet. –

+3

La respuesta no responde el título de la pregunta. La respuesta aceptada ya indica que pageContext está implícito en JSP. Esta respuesta no es útil, es ruido y se refiere a formas desanimadas de codificación. También es tres años mayor que la respuesta aceptada, y de ninguna manera debe referirse a prácticas muy desactualizadas. Entonces, respetuosamente no estoy de acuerdo con tu comentario @MarcusJuniusBrutus – KjetilNordin

1

Incluir <%@ page isELIgnored="false"%> en la parte superior de la página JSP.

Cuestiones relacionadas