JSP共有九大內置對象:
(1) HttpSession類的session對象
作用:主要用於來分別保存每個用戶信息,與請求關聯的會話;
會話狀態維持是Web應用開發者必須面對的問題。
(2) HttpServletRequest類的request對象
作用:代表請求對象,主要用於接受客戶端通過HTTP協議連接傳輸到服務器端的數據。
(3) HttpServletResponse類的respone對象
作用:代表響應對象,主要用於向客戶端發送數據
(4) JspWriter類的out對象
作用:主要用於向客戶端輸出數據;
Out的基類是JspWriter
(5) ServletContex類的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隱式對象。
*作用域訪問隱式對象。
*參數訪問隱式對象。
*首部訪問隱式對象。
*初始化參數訪問隱式對象。
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
|
與應用程序作用域屬性的名稱和值相關聯的 Map 類
|
|
請求參數
|
param
|
按名稱存儲請求參數的主要值的 Map 類
|
paramValues
|
將請求參數的所有值作為 String 數組存儲的 Map 類
|
|
請求頭
|
header
|
按名稱存儲請求頭主要值的 Map 類
|
headerValues
|
將請求頭的所有值作為 String 數組存儲的 Map 類
|
|
Cookie
|
cookie
|
按名稱存儲請求附帶的 cookie 的 Map 類
|
初始化參數
|
initParam
|
按名稱存儲 Web 應用程序上下文初始化參數的 Map 類
|
其實我的主要目的是為了搞清楚pageContext對象,如下:
我們之前曾經使用過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);
%>