为什么在JSP中需要pageContext?

Dea*_*mer 25 java jsp el

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

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

Bal*_*usC 32

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


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


会话超时时刷新页面:

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval}">
Run Code Online (Sandbox Code Playgroud)

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

<param name="jsessionid" value="${pageContext.session.id}">
Run Code Online (Sandbox Code Playgroud)

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

<c:if test="${pageContext.session['new']}">Welcome!</c:if>
Run Code Online (Sandbox Code Playgroud)

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


显示用户IP:

Your IP is: ${pageContext.request.remoteAddr}

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

<a href="${pageContext.request.contextPath}/login">login</a>
Run Code Online (Sandbox Code Playgroud)

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

<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">
Run Code Online (Sandbox Code Playgroud)

等等.在上面的链接HttpServletRequestHttpSessionjavadoc中查看所有那些getter方法.其中一些也可能在JSP/EL中很有用.

  • 您不需要它来访问隐式对象或属性.例如`$ {param.name}`(对于`request.getParameter(name)`),`$ {cookie.name}`(对于`getName().equals(name)`),`$ {header. name``(对于`request.getHeader(name)`)或`$ {attributename}`(对于`pageContext.findAttribute(attributename)`)就足够了.所有隐含对象都列在[此处](http://docs.sun.com/app/docs/doc/819-3669/bnaij?l=es&a=view).顺便说一句,你的英语很差.再一次思考之后,你原来的问题可能含糊不清.你真的需要验证并澄清这一点. (4认同)