Why there is a need of pageContext in JSP?

元气小坏坏 提交于 2019-12-18 10:22:51

问题


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.


回答1:


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.




回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/3735405/why-there-is-a-need-of-pagecontext-in-jsp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!