为什么在JSP中需要pageContext?

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

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

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


更新 :有时只想直接访问HttpServletRequestHttpSession的getter方法。 在标准JSP中,两者仅由${pageContext} 。 以下是一些实际使用示例:


会话超时时刷新页面:

  

将会话ID传递给Applet(以便它可以在同一会话中与servlet通信):

  

仅在会话的第一次请求时显示某些消息:

 Welcome! 

请注意, new有特殊处理,因为它是EL中的保留关键字,至少从EL 2.2开始


显示用户IP:

 您的IP是:$ {pageContext.request.remoteAddr} 

在没有硬编码当前上下文路径的情况下建立链接域相关:

 login 

动态定义标记(有一些JSTL函数 taglib的帮助):

  

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

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

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

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