2010-09-17 42 views
25

當我們可以訪問JSP中的所有隱式變量時,爲什麼我們有pageContext爲什麼JSP中需要pageContext?

我的假設如下:如果我們使用EL表達式或JSTL來訪問或設置屬性,我們需要pageContext。讓我知道我是否正確。

回答

30

您需要它訪問-隱式變量。現在有意義嗎?


更新:有時候只是想訪問直接HttpServletRequestHttpSession getter方法。在標準JSP中,兩者都只能由${pageContext}提供。下面是一些真實世界中使用的例子:


刷新頁面時,會話超時:

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

傳遞會話ID的小程序(以便它可以在同一個會話與servlet的溝通):

<param name="jsessionid" value="${pageContext.session.id}"> 

僅在會話的第一個請求顯示一些消息:

<c:if test="${pageContext.session['new']}">Welcome!</c:if> 

注意到new具有特殊處理,因爲它是在EL保留關鍵字,至少,由於EL 2.2


顯示用戶IP:

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

製作沒有硬編碼當前上下文路徑鏈接域相對:

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

動態定義<base>標籤(與JSTL functions標籤庫的一點幫助):

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

等等。在上述鏈接HttpServletRequestHttpSession javadoc中瞭解所有這些getter方法。其中一些可能在JSP/EL中也很有用。

+0

一個例子可以清除我。 – 2010-09-17 12:57:38

+0

正如我提到的el表達式語言,您需要pageContext。 – 2010-09-17 13:35:57

+4

您不需要它來訪問隱式對象或屬性。例如。 '$ {param.name}'(對於'request.getParameter(name)'),'$ {cookie.name}'(對於'getName()。equals(name)'),'$ {header.name }(對於'request.getHeader(name)')或'$ {attributename}'(對於'pageContext.findAttribute(attributename)')就足夠了。所有隱式對象都列在[here](http://docs.sun.com/app/docs/doc/819-3669/bnaij?l=es&a=view)。順便說一句,你的英語很差。再次思考之後,您的原始問題可能會含糊不清。你真的需要驗證和澄清這一點。 – BalusC 2010-09-17 13:36:53

-1

所有11個隱式EL變量都被定義爲Map,除了pageContext變量。 pageContext變量提供訪問請求/響應/會話屬性或轉發請求的便捷方法。當然你可以做得比這更多