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