1. 程式人生 > >轉:jsp內建物件中page與pageContext與el內建物件pageScope與pageContext區別

轉:jsp內建物件中page與pageContext與el內建物件pageScope與pageContext區別

原文地址:jsp內建物件中page與pageContext與el內建物件pageScope與pageContext區別

首先說明一下jsp9大內建物件

(1)HttpSession類的session物件
作用:主要用於來分別儲存每個使用者資訊,與請求關聯的會話;
         會話狀態維持是Web應用開發者必須面對的問題。
(2) HttpServletRequest類的request物件
作用:代表請求物件,主要用於接受客戶端通過HTTP協議連線傳輸到伺服器端的資料。
(3) HttpServletResponse類的respone物件
作用:代表響應物件,主要用於向客戶端傳送資料
(4) JspWriter類的out物件
作用:主要用於向客戶端輸出資料; 
        Out的基類是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大內建物件

(1)pageScope:獲取jsp中pageContext域屬性,相當於pageContext.getAttribute("xxx")
(2)requestScope:獲取request域屬性,相當於request.getAttribute("xxx")
(3)sessionScope:獲取session域屬性,相當於session.getAttribute("xxx")
(4)applicationScope:獲取application域屬性,相當於application.getAttribute("xxx")
(5)param:對應引數,它是一個Map,其中key是引數,value是引數值,適用於單值的引數,相當於request.getParameter("xxx")
(6)paramValues:對應引數,她是一個Map,其中key是引數,value是多個引數值,適用於多值的引數,相當於request.getParameterValues("xxx")
(7)header:對應請求頭,它是一個Map,其中key表示頭名稱,value是單個頭值,適用於單值的請求頭,相當於request.getHeader("xxx")
(8)headerValues:對應請求頭,它是一個Map,其中key表示頭名稱,value是多個頭值,適用於多值的請求頭,相當於request.getHeaders("xxx")
(9)initParam:獲取web.xml中<context-param>內的引數,${ initParam.xxx},xxx就是<param-name>標籤內的值,進而得到<param-value>中的值
(10)cookie:用於獲取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie物件,例如${cookie.JSESSIONID.value }就是獲取sessionId

(11)pageContext:可以獲取JSP九大內建物件,相當於使用該物件呼叫getxxx()方法,例如pageContext.getRequest()可以寫為${pageContext.request)


el中的作用域  
      
pageContext(1)  當前頁的pageContext物件  
pageScope   把page作用域中的資料對映為一個map物件  
requestScope(2)     把request作用域中的資料對映為一個map物件  
sessionScope    把session作用域中的資料對映為一個map物件  
applicationScope    把application作用域中的資料對映為一個map物件  
param   對應request.getParameter()  
paramValues(3)  對應request.getParameterValues()  
header(4)   對應request.getHeader()  
headerValues    對應request.getHeaderValues()  
cookie(5)   對應request.getCookies()  
initParam(6)    對應ServletContext.getInitParamter()

jsp的page pagecontext ;el的pageScope pagecontext 下面來說到一下他們的區別方便大家記憶

首先jsp內建物件的page可以直接忽略因為用的比較少。簡單說一下它的用法

page物件有點類似於Java程式設計中的this指標,就是指當前JSP頁面本身。page是java.lang.Object類的物件。

page物件的常用方法

比較常用的page內建物件的方法有:


getClass():返回當時Object的類。
hashCode():返回此Object的雜湊程式碼。
toString():把此時的Object類轉換成字串。
equals(Object o):比較此物件是否和指定的物件是否相等。
copy(Object o):把此物件複製到指定的物件當中去。
clone():對此物件進行克隆。
由於page內建物件在實際開發過程並不經常使用,所以page物件的其他方法在這裡就不一一列舉出來了。

page的常用方法例項

下面舉一個例項來加深對page內建物件使用的理解。建立一個page.jsp檔案,其詳細原始碼如下:

 1 <%@ page language="java" contentType="text/html;charSet=GBK" %>
 2 <%@ page import="java.lang.Object" %>
 3 <html>
 4     <body>
 5         <center><h3>Page內建物件的例項</h3></center>
 6         <%!Object obj; %> <!-- 物件申明 -->
 7         getClass:<%=page.getClass() %>
 8         hashCode:<%=page.hashCode()%>
 9         toString:<%=page.toString()%>
10         equals:<%=page.equals(obj) %>
11         equlas2:<%=page.equals(this) %>
12     </body>
13 </html>

 


接著說一下jsp的pageContext 與el表示式的pageContext二者是同一物件!

el中pageContext可以獲取JSP九大內建物件,相當於使用該物件呼叫getxxx()方法,例如pageContext.getRequest()可以寫為${pageContext.request)

 

jsp的中Page域,request域,session域,application域都可以setAttribute與getAttribute。

jsp中可以使用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); 

%>

 

接下來說

EL表示式中的pageScope

頁面範圍的變數名稱對映到其值。例如,EL 表示式可以使用 ${pageScope.objectName} 訪問一個 JSP 中頁面範圍的物件,還可以使用 ${pageScope.objectName.attributeName} 訪問物件的屬性

相當於可以取出page域中的資料

 

綜上可以總結出

page與 pageContext 和pageScope無關

pageContext 物件可以訪問所有域, scope(範圍) 不寫預設將資料放到page域

pageScope 訪問page域
---------------------
作者:煦風雲海
來源:CSDN
原文:https://blog.csdn.net/a327736051/article/details/79439703
版權宣告:本文為博主原創文章,轉載請附上博文連結!