轉: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
作用:管理網頁屬性,為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
版權宣告:本文為博主原創文章,轉載請附上博文連結!