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.
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.
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.