wake-up-neo.net

Warum wird in JSP pageContext benötigt?

Warum haben wir pageContext , wenn wir auf alle impliziten Variablen in JSP zugreifen können?

Meine Annahme ist die folgende: Wenn wir EL-Ausdrücke oder JSTL verwenden, um auf die erforderlichen Attribute zuzugreifen oder diese festzulegen pageContext . Lassen Sie mich wissen, ob ich recht habe.

25
Dead Programmer

Sie benötigen es für den Zugriff auf nicht - implizite Variablen. Macht es jetzt Sinn?


Update : Manchmal möchte ich einfach direkt auf die Getter-Methoden von HttpServletRequest und HttpSession zugreifen. In der Standard-JSP sind beide nur über ${pageContext} verfügbar. Hier einige Beispiele aus der realen Welt:


Seite bei Zeitüberschreitung der Sitzung aktualisieren:

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

Sitzungs-ID an ein Applet übergeben (damit es mit Servlet in derselben Sitzung kommunizieren kann):

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

Einige Meldungen werden nur bei der ersten Anforderung einer Sitzung angezeigt:

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

Beachten Sie, dass new eine Sonderbehandlung hat, da es zumindest in EL seit EL 2.2 ein reserviertes Schlüsselwort ist.


Benutzer-IP anzeigen:

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

<base>-Tag dynamisch definieren (mit Hilfe von JSTL-Funktionen taglib):

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

Und so weiter. Werfen Sie einen Blick in die oben genannten HttpServletRequest- und HttpSession-Javadoc, um mehr über diese Getter-Methoden zu erfahren. Einige von ihnen können auch in JSP/EL nützlich sein.

32
BalusC

Um @ BalusCs hervorragende Antwort hinzuzufügen, ist der von Ihnen angezeigte PageContext möglicherweise nicht auf das beschränkt, was Sie in der Spezifikation sehen.

Beispielsweise ist Lucee ein JSP-Servlet, das der Schnittstelle und den abstrakten Klassen viele Funktionen hinzufügt. Durch einen Verweis auf den PageContext erhalten Sie Zugriff auf viele Informationen, die ansonsten nicht verfügbar sind.

0
isapir