Jsp隱式對象 和 EL隱式對象

來源:互聯網
上載者:User

JSP共有九大內建對象:

(1) HttpSession類的session對象
作用:主要用於來分別儲存每個使用者資訊,與請求關聯的會話;
工作階段狀態維持是Web應用開發人員必須面對的問題。
(2) HttpServletRequest類的request對象
作用:代表請求對象,主要用於接受用戶端通過HTTP協議串連傳輸到伺服器端的資料。

(3) HttpServletResponse類的respone對象
作用:代表響應對象,主要用於向用戶端發送資料
(4) JspWriter類的out對象
作用:主要用於向用戶端輸出資料;
Out的基類是javax.servlet.jsp.JspWriter
(5) ServletContext類的application對象
作用:主要用於儲存使用者資訊,程式碼片段的運行環境;
它是一個共用的內建對象,即一個容器中的多個使用者共用一個application對象,故其儲存的資訊被所有使用者所共用.
(6) PageContext類的pageContext對象
作用:管理網頁屬性,為JSP頁麵包裝頁面的上下文,管理對屬於JSP中特殊可見部分中已命名物件的訪問,它的建立和初始化都是由容器來完成的。
(7) ServletConfig類的config對象
作用:程式碼片段設定物件,表示Servlet的配置。
(8) Object類的page(相當於this)對象
作用:處理JSP網頁,是Object類的一個執行個體,指的是JSP實作類別的執行個體,即它也是JSP本身,只有在JSP頁面範圍之內才是合法的。
(9)Exception
作用:處理JSP檔案執行時發生的錯誤和異常

EL共有11大內建對象:

 JSP開發人員可以在EL運算式中使用EL隱式對象,而無須任何顯式的編碼活聲明。隱式對象就是設計用

來為 JSP 編程提供方便的,通過隱式對象,用EL編寫的代碼就可以直接使用JSP頁面的一些最常用的地方。總共有11個隱式對象,這11個隱式對象可以分為5大類:
*JSP隱式對象。
*範圍訪問隱式對象。
*參數訪問隱式對象。
*首部訪問隱式對象。
*初始化參數訪問隱式對象。
JSP隱式對象類中只有一個EL隱式對象,這就是pageContext隱式對象。這與同名的JSP隱式對象實際上就是同一個對象。餘下的EL隱式對象都是Java映射(map),他們只是提供了更容易的途徑來訪問pageContext隱式對象的某些性質。
共有4個範圍隱式對象,分別為pageScope, requestScope, sessionScope和applicationScope. 這些隱式對象都是映射,利用他們可以很容易的訪問範圍屬性。例如:附加到request範圍的username屬性可以通過EL運算式${ requestScope.username}來直接存取。
有兩個參數訪問隱式對象,可以用來訪問HTTP請求參數(表單提交參數),即param和paramValues. param 是一個用於訪問單值參數的映射, paramValues則可用於訪問可能包含多個值的參數。接下來的實驗會展示這將如何處理。
有3個首部訪問隱式對象,可以用於訪問HTTP首部,分別是header, headerValues和cookie。如果想以原始的方式訪問HTTP首部或cookie, 這些映射就很有用。
另外還有一個初始化參數訪問隱式對象:initParm。這個映射可以用於訪問初始化參數的值,初始化參數的值一般都在web.xml中設定。

類別

標識符

描述

JSP

pageContext

PageContext 執行個體對應於當前頁面的處理

範圍

pageScope

與頁面範圍屬性的名稱和值相關聯的 Map 類

requestScope

與請求範圍屬性的名稱和值相關聯的 Map 類

sessionScope

與會話範圍屬性的名稱和值相關聯的 Map 類

applicationScope

與Application 領域屬性的名稱和值相關聯的 Map 類

請求參數

param

按名稱儲存請求參數的主要值的 Map 類

paramValues

將請求參數的所有值作為 String 數組儲存的 Map 類

要求標頭

header

按名稱儲存要求標頭主要值的 Map 類

headerValues

將要求標頭的所有值作為 String 數組儲存的 Map 類

Cookie

cookie

按名稱儲存請求附帶的 cookie 的 Map 類

初始化參數

initParam

按名稱儲存 Web 應用程式上下文初始化參數的 Map 類

其實我的主要目的是為了搞清楚pageContext對象,如下:

Jsp中pageContext的作用

pageContext 隱含物件對應於javax.servlet.jsp.PageContext型態之物件,,隱含物件都自動的被加入至pageContext中,您可以藉由它來取得與JSP相關的隱含物件對應之Servlet物件,像是getRequest()可以取得ServletRequest, getServletConfig()可以取得ServletConfig,getSession()可以取得HttpSession等等。提供取得隱含物件對應之Servlet物件並不是pageContext的主要作用,它的主要功能在提供一個單一個介面,以管理各種的公開物件(像是
HttpSession、ServletContext、ServletConfig、ServletRequest、ServletResponse等等),提供一個單一的API來管理屬性作用範圍等等。

我們之前曾經使用過session的setAttribute()等方法設定一個進程可以共用的屬性物件,使用session設定的屬性在同一個進程中可以共用,除了session之外,還有pageContext、 request、application也都可以使用setAttribute()之類的方法(詳請查閱API檔案)來設定可以共用的屬性物件,只不過這四個物件所設定的屬性其共用範圍各不相同。

使用pageContext所設定的屬性物件,其共用範圍限於同一個 JSP頁面,使用request所設定的屬性物件,其在同一個request處理期間可以共用(包括forward給其它JSP頁面),session物件所設定的屬性物件則限於同一個進程作用期間可以共用,而application物件所設定的屬性,則在整個Web應用程式中的JSP頁面都可以共用。

以下舉application為例,您可以將一些物件當作屬性設定給application,則另一個JSP頁面就可以在適當的時候取得這個屬性物件,例如:
<%

String attr = "字串物件";
out.println("設定屬性給application:" + attr);
application.setAttribute("str", attr);
%>
我們先連上這個JSP網頁以執行屬性設定,然後我們再連上這個JSP網頁:
<%
String attr = (String) application.getAttribute("str");
out.println("取得application屬性:" + attr);
%>
由於我們之前已經將字串物件設定在application中作為屬性,所以我們可以在上面這個頁面中取得之前

設定的物件,同樣的道理,您也可以用相同的方式設定屬性給pageContext、request、session等物件,只要在允許的作用範圍中,就可以取得所設定的屬性物件。

您可以使用pageContext物件來設定屬性,並指定屬性的作用範圍,而不用使用個別的pageContext、request、session、 application來進行設定,這就是之前所提的,以pageContext提供一個單一的API來管理屬性作用範圍,您可以使用以下的方法來進行設定:

getAttribute(String name, int scope)
setAttribute(String name, Object value, int scope)
removeAttribute(String name, int scope)
其中的scope可以使用以下的常數來進行指定:pageContext.PAGE_SCOPE、pageContext.REQUEST_SCOPE、 pageContext.SESSION_SCOPE、pageContext.APPLICATION_SCOPE,常數的名稱已經直接指明屬性範圍,我們可以將上面的兩個JSP頁面改為以下的形式:

<%
String attr = "字串物件";
out.println("設定屬性給application:" + attr);
pageContext.setAttribute("str", attr, pageContext.APPLICATION_SCOPE);
%>
<%
String attr = (String) pageContext.getAttribute("str", pageContext.APPLICATION_SCOPE);

out.println("取得application屬性:" + attr);
%>

JSP隱式對象和EL隱式對象

JSP隱式對象:

首先要瞭解什麼是JSP隱式對象,它是Web容器載入的一組類的執行個體,它不像一般的Java對象那樣需要“new”去擷取執行個體,而是直接就可以在JSP頁面中使用的對象。JSP提供的隱式對象分為4個主要類別,如下介紹:

1、輸入和輸出對象:request、response和out對象。
2、範圍通訊對象:session、application、pagecontext。
3、servlet對象:config和page。
4、錯誤對象:exception。

EL 隱式對象的標識符

不要將這些對象與 JSP 隱式對象(一共只有九個)混淆,其中只有一個對象是它們所共有的。
EL 隱式對象
類別                標識符                            描述  
JSP                 pageContext                  PageContext 執行個體對應於當前頁面的處理  
範圍            pageScope                    與頁面範圍屬性的名稱和值相關聯的 Map 類  
requestScope  與請求範圍屬性的名稱和值相關聯的 Map 類  
sessionScope  與會話範圍屬性的名稱和值相關聯的 Map 類  
applicationScope  與Application 領域屬性的名稱和值相關聯的 Map 類  
請求參數 param  按名稱儲存請求參數的主要值的 Map 類  
paramValues  將請求參數的所有值作為 String 數組儲存的 Map 類  
要求標頭 header  按名稱儲存要求標頭主要值的 Map 類  
headerValues  將要求標頭的所有值作為 String 數組儲存的 Map 類  
Cookie cookie  按名稱儲存請求附帶的 cookie 的 Map 類  
初始化參數 initParam  按名稱儲存 Web 應用程式上下文初始化參數的 Map 類  

儘管 JSP 和 EL 隱式對象中只有一個公用對象( pageContext ),但通過 EL 也可以訪問其它 JSP 隱式對象。原因是 pageContext 擁有訪問所有其它八個 JSP 隱式對象的特性。實際上,這是將它包括在 EL 隱式對象中的主要理由。

其餘所有 EL 隱式對象都是映射,可以用來尋找對應於名稱的對象。前四個映射表示先前討論的各種屬性範圍。可以用它們來尋找特定範圍中的標識符,而不用依賴於 EL 在預設情況下使用的順序尋找過程。
接下來的四個映射用來擷取請求參數和要求標頭的值。因為 HTTP 協議允許請求參數和要求標頭具有多個值,所以它們各有一對映射。每對中的第一個映射返回請求參數或頭的主要值,通常是恰巧在實際請求中首先指定的那個值。每對中第二個映射允許檢索參數或頭的所有值。這些映射中的鍵是參數或頭的名稱,但這些值是 String 對象的數組,其中的每個元素都是單一參數值或頭值。

cookie 隱式對象提供了對由請求設定的 cookie 名稱的訪問。這個對象將所有與請求相關聯的 cookie 名稱映射到表示那些 cookie 特性的 Cookie 對象。

最後一個 EL 隱式對象 initParam 是一個映射,它儲存與 Web 應用程式相關聯的所有內容相關的初始化參數的名稱和值。初始化參數是通過 web.xml 部署描述符檔案指定的,該檔案位於應用程式的 WEB-INF 目錄中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.