JSP內置對象和EL內置對象及區別解析

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開發人員可以在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
與應用程序作用域屬性的名稱和值相關聯的 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); 
%>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章