Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JSP中需要pageContext?_Java_Jsp_El - Fatal编程技术网

Java 为什么JSP中需要pageContext?

Java 为什么JSP中需要pageContext?,java,jsp,el,Java,Jsp,El,当我们可以访问JSP中的所有隐式变量时,为什么我们有pageContext 我的假设如下:如果我们使用EL表达式或JSTL来访问或设置pageContext所需的属性。让我知道我是否正确。您需要它来访问非隐式变量。现在有意义了吗 更新:有时只想直接访问和的getter方法。在标准JSP中,这两种方法都只能由${pageContext}使用。以下是一些真实世界的使用示例: 会话超时时刷新页面: <meta http-equiv="refresh" content="${pageConte

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


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

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


更新:有时只想直接访问和的getter方法。在标准JSP中,这两种方法都只能由
${pageContext}
使用。以下是一些真实世界的使用示例:


会话超时时刷新页面:

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

使链接域相对,而不硬编码当前上下文路径:

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


动态定义
标记(借助taglib):




等等。查看前面链接的
HttpServletRequest
HttpSession
javadoc,了解所有这些getter方法。其中一些在JSP/EL中可能也很有用。

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

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


例如,是一个JSPServlet,它向接口和抽象类添加了许多特性。通过获取对PageContext的引用,您可以访问许多其他方面不可用的信息。

正如我在el expression language中提到的,您需要PageContext。您不需要它来访问隐式对象或属性。例如,
${param.name}
(对于
request.getParameter(name)
),
${cookie.name}
(对于
getName().equals(name)
)的cookie,
${header.name}
(对于
request.getHeader(name)
)或
${attributename}
(对于
pageContext.findAttribute(attributename)
)就足够了。将列出所有隐式对象。顺便说一下,你的英语很差。再想一想,你原来的问题可能有歧义。你真的需要核实和澄清这一点。谢谢你的回答和你花的时间。是的,我的英语很差,我会通过在这里提问来努力提高。
<c:if test="${pageContext.session['new']}">Welcome!</c:if>
Your IP is: ${pageContext.request.remoteAddr}
<a href="${pageContext.request.contextPath}/login">login</a>
<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">