为什么在JSP中需要pageContext?

时间:2010-09-17 12:45:57

标签: java jsp el

当我们可以访问JSP中的所有隐式变量时,为什么我们有 pageContext

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

3 个答案:

答案 0 :(得分:32)

您需要它来访问 - 隐式变量。它现在有意义了吗?


更新:有时您只想直接访问HttpServletRequestHttpSession的getter方法。在标准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 taglib的帮助):

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

等等。在前面提到的HttpServletRequestHttpSession javadoc中查看所有这些getter方法。其中一些在JSP / EL中也很有用。

答案 1 :(得分:0)

要添加@BalusC的优秀答案,您获得的PageContext可能不仅限于您在规范中看到的内容。

例如,Lucee是一个JSP Servlet,它为接口和抽象类添加了许多功能。通过获取对PageContext的引用,您可以访问大量不可用的信息。

答案 2 :(得分:-1)

除pageContext变量外,所有11个隐式EL变量都定义为Map。 pageContext变量提供了访问请求/响应/会话属性或转发请求的便捷方法。