当我们可以访问JSP中的所有隐式变量时,为什么要使用 pageContext ?
我的假设如下:如果我们使用EL表达式或JSTL,要访问或设置属性,我们需要 pageContext 。让我知道我是否正确。
您需要它来访问 非 隐式变量。现在有意义吗?
更新 :有时候只是想访问的getter方法HttpServletRequest和HttpSession直接。在标准JSP中,两者都只能通过获得${pageContext}。以下是一些实际使用示例:
HttpServletRequest
HttpSession
${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 2.2开始,它是EL中的保留关键字。
new
显示用户IP:
您的IP是:$ {pageContext.request.remoteAddr}
使链接相对于域,而无需对当前上下文路径进行硬编码:
<a href="${pageContext.request.contextPath}/login">login</a>
动态定义<base>标签(在JSTL函数 taglib的帮助下):
<base>
<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">
Etcetera。窥视上述链接HttpServletRequest和HttpSessionjavadoc,以了解所有这些getter方法。其中一些在JSP / EL中也可能有用。