为什么在JSP中需要pageContext?
当我们可以访问JSP中的所有隐式变量时,为什么我们有pageContext ?
我的假设如下:如果我们使用EL表达式或JSTL,要访问或设置属性,我们需要pageContext 。 让我知道我是否正确。
您需要它来访问非隐式变量。 它现在有意义吗?
更新 :有时只想直接访问HttpServletRequest
和HttpSession
的getter方法。 在标准JSP中,两者仅由${pageContext}
。 以下是一些实际使用示例:
会话超时时刷新页面:
将会话ID传递给Applet(以便它可以在同一会话中与servlet通信):
仅在会话的第一次请求时显示某些消息:
Welcome!
请注意, new
有特殊处理,因为它是EL中的保留关键字,至少从EL 2.2开始
显示用户IP:
您的IP是:$ {pageContext.request.remoteAddr}
在没有硬编码当前上下文路径的情况下建立链接域相关:
login
动态定义
标记(有一些JSTL函数 taglib的帮助):
等等。 在前面提到的HttpServletRequest
和HttpSession
javadoc中查看所有这些getter方法。 其中一些在JSP / EL中也很有用。
要添加@BalusC的优秀答案,您获得的PageContext可能不仅限于您在规范中看到的内容。
例如, Lucee是一个JSP Servlet,它为接口和抽象类添加了许多function。 通过获取对PageContext的引用,您可以访问大量不可用的信息。
除pageContext变量外,所有11个隐式EL变量都定义为Map。 pageContext变量提供了访问请求/响应/会话属性或转发请求的便捷方法。 当然,你可以做更多的事情