web-dev-qa-db-fra.com

Pourquoi existe-t-il un besoin de pageContext dans JSP?

Quand nous pouvons accéder à toutes les variables implicites dans JSP, pourquoi avons-nous pageContext ?

Mon hypothèse est la suivante: si nous utilisons des expressions EL ou JSTL, pour accéder ou définir les attributs dont nous avons besoin pageContext . Dites-moi si j'ai raison.

25
Dead Programmer

Vous en avez besoin pour accéder aux variables implicites non -. Est-ce que cela a du sens?


Update : Parfois, j'aimerais simplement accéder directement aux méthodes getter de HttpServletRequest et HttpSession . Dans JSP standard, les deux ne sont disponibles que par ${pageContext}. Voici quelques exemples d'utilisation dans le monde réel:


Actualisation de la page lorsque la session expire:

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval}">

Passer l'identifiant de session à une applet (afin qu'elle puisse communiquer avec le servlet dans la même session):

<param name="jsessionid" value="${pageContext.session.id}">

Affichage de certains messages uniquement à la première demande d'une session:

<c:if test="${pageContext.session['new']}">Welcome!</c:if>

notez que new fait l'objet d'un traitement spécial car il s'agit d'un mot clé réservé dans EL, du moins depuis EL 2.2


Affichage de l'adresse IP de l'utilisateur:

<a href="${pageContext.request.contextPath}/login">login</a>

Définir dynamiquement la balise <base> (avec un peu d'aide de fonctions JSTL taglib):

<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">

Etc. Jetez un coup d'œil dans les javadocs HttpServletRequest et HttpSession susmentionnés pour en savoir plus sur toutes ces méthodes getter. Certains d'entre eux peuvent également être utiles dans JSP/EL.

32
BalusC

Pour ajouter à l'excellente réponse de @ BalusC, il se peut que le PageContext que vous obtenez ne soit pas limité à ce que vous voyez dans la spécification.

Par exemple, Lucee est un servlet JSP qui ajoute de nombreuses fonctionnalités à l'interface et aux classes abstraites. En obtenant une référence au PageContext, vous pouvez accéder à de nombreuses informations qui seraient autrement indisponibles.

0
isapir