Why there is a need of pageContext in JSP?
Asked Answered
K

3

26

When we can access all the implicit variables in JSP, why do we have pageContext ?

My assumption is the following: if we use EL expressions or JSTL, to access or set the attributes we need pageContext. Let me know whether I am right.

Kleeman answered 17/9, 2010 at 12:45 Comment(0)
A
33

You need it to access non-implicit variables. Does it now make sense?


Update: Sometimes would just like to access the getter methods of HttpServletRequest and HttpSession directly. In standard JSP, both are only available by ${pageContext}. Here are some real world use examples:


Refreshing page when session times out:

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

Passing session ID to an Applet (so that it can communicate with servlet in the same session):

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

Displaying some message only on first request of a session:

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

note that new has special treatment because it's a reserved keyword in EL, at least, since EL 2.2


Displaying user IP:

Your IP is: ${pageContext.request.remoteAddr}

Making links domain-relative without hardcoding current context path:

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

Dynamically defining the <base> tag (with a bit help of JSTL functions taglib):

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

Etcetera. Peek around in the aforelinked HttpServletRequest and HttpSession javadoc to learn about all those getter methods. Some of them may be useful in JSP/EL as well.

Arvind answered 17/9, 2010 at 12:50 Comment(3)
as i have mentioned for el expression language u need pageContext.Kleeman
You don't need it to access implicit objects or attributes. E.g. ${param.name} (for request.getParameter(name)), ${cookie.name} (for cookies whose getName().equals(name)), ${header.name} (for request.getHeader(name)) or ${attributename} (for pageContext.findAttribute(attributename)) is then sufficient. All implicit objects are listed here. By the way, your English is pretty poor. After thinking once more, there's probably ambiguity in your original question. You really need to verify and clarify this.Arvind
thanks for the answer and the time you spent. yes my english is poor , i will try to improve,by asking questions here.Kleeman
P
0

To add to @BalusC's excellent answer, the PageContext that you are getting might not be limited to what you see in the specification.

For example, Lucee is a JSP Servlet that adds many features to the interface and abstract classes. By getting a reference to the PageContext you can gain access to a lot of information that is otherwise unavailable.

Prosser answered 3/5, 2018 at 21:23 Comment(0)
S
-1

All 11 implicit EL variables are defined as Map, except the pageContext variable. pageContext variable provides convenient methods for accessing request/response/session attributes or forwarding the request.

Strobilaceous answered 7/8, 2017 at 0:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.