当我们可以访问JSP中的所有隐式变量时,为什么我们有 pageContext ?
我的假设如下:如果我们使用EL表达式或JSTL,则访问或设置我们需要的属性 pageContext 。让我知道我是否正确。
答案 0 :(得分:32)
您需要它来访问非 - 隐式变量。它现在有意义了吗?
更新:有时您只想直接访问HttpServletRequest
和HttpSession
的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)}/">
等等。在前面提到的HttpServletRequest
和HttpSession
javadoc中查看所有这些getter方法。其中一些在JSP / EL中也很有用。
答案 1 :(得分:0)
要添加@BalusC的优秀答案,您获得的PageContext可能不仅限于您在规范中看到的内容。
例如,Lucee是一个JSP Servlet,它为接口和抽象类添加了许多功能。通过获取对PageContext的引用,您可以访问大量不可用的信息。
答案 2 :(得分:-1)
除pageContext变量外,所有11个隐式EL变量都定义为Map。 pageContext变量提供了访问请求/响应/会话属性或转发请求的便捷方法。