为什么在JSP需要的pageContext的?

问题描述 投票:25回答:3

当我们可以访问JSP所有的隐含变量,为什么我们的pageContext?

我的假设是:如果我们使用EL表达式或JSTL,访问或设置我们需要pageContext中的属性。让我知道我是否正确。

java jsp el
3个回答
32
投票

你需要它来访问非隐含变量。现在它有意义吗?


更新:有时候只是想访问HttpServletRequest的getter方法和直接HttpSession。在标准的JSP,都只能由${pageContext}可用。下面是一些真实世界的使用范例:


清爽的页面时,会话超时:

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

传递会话ID到一个Applet(以便它可以在同一个会话与servlet的通信):

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

有的显示消息仅在会话的第一个请求:

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

注意,new有特殊待遇,因为它是在EL保留关键字,至少,因为EL 2.2


显示用户IP:

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

制作没有硬编码当前上下文路径链接域相对:

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

动态定义<base>标签(与JSTL functions标签库的一点帮助):

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

等等。皮克在周围的aforelinked HttpServletRequestHttpSession的javadoc了解所有这些getter方法。他们中有些人可能是在JSP / EL也是有用的。


0
投票

要添加到@ BalusC的出色答卷,您得到可能不仅限于你在规范看到PageContext中。

例如,Lucee是JSP的Servlet增加了许多功能的接口和抽象类。通过获取到的PageContext一个参考,你可以访问大量的信息是不可用。


-1
投票

所有11个隐含EL变量定义地图,除了pageContext的变量。的pageContext变量提供用于访问的请求/响应/会话属性或转发请求便利的方法。

© www.soinside.com 2019 - 2024. All rights reserved.