JSP中的九大內置對象(基本概括和內置對象之間的傳值)

先簡單概括一下九大內置對象的一些定義

定義:爲了接收和處理用戶的請求,由服務器(tomcat)自動創建的,用於和用戶進行數據的交互和傳遞,和服務器組件的傳遞;

Request

生存週期:

請求交給服務器就創建,請求結束時銷燬(請求範圍)由後臺決定

作用:

1、接收和傳遞用戶的請求數據(參數)

2、接收和傳遞服務器組件設置的數據信息(屬性)

Response

生存週期:

請求交給服務器就創建,請求結束時銷燬(請求範圍)

作用:

把結果信息放在http協議中,回傳給瀏覽器顯示

Session

生存週期:

用戶第一次發請求訪問服務器動態組件時創建,用戶下線時銷燬(關閉瀏覽器後15分鐘)(用戶範圍)(生存時間遠大於request)用戶決定

作用:

傳遞驗證信息

Application

生存週期:

服務器開啓到服務器關閉(服務範圍)

作用:存放公共信息(存放三個框架的繼承信息)

Config

生存週期:

服務器開啓到服務器關閉(服務範圍)

作用:傳遞配置信息(web.xml中組件的配置信息的初始化參數)

page和pageContext

生存週期:

訪問頁面到離開頁面

作用:存放臨時信息

out和response類似

爲什麼不用:

1不符合mvc設計模式

2不安全

Exception(服務範圍)

作用:處理異常信息

 

1.request的類型爲:HttpServletRequestWrapper,這個類實現了HttpServletRequest接口(支持了http
協議),而這個接口繼承了ServletRequest(不支持http協議)接口(接口可以多繼承)
2.接收request使用httpservletrequest接口類型來作爲形參,降低耦合性

1.response的類型爲:類似於request,HttpServletResponseWrapper,這個類實現了
HttpServletResponse接口(支持了http協議),而這個接口繼承了ServletResponse(不支持http協
議)接口(接口可以多繼承)
2.以HttpServletResponse類型的接口爲形參

 

設置和獲取屬性

Public abstract  void setAttribute(String name,Object value)

  屬性名稱爲字符串

  屬性值可以爲任意對象  

public abstract Object getAttribute(String name)

 拿到屬性值是object類型,需要造型

 兩個方法的,參數及屬性的類型必須記住

 

先來重點講一下內置對象之間的傳值:

request傳值

用戶只發一次請求,tomca創建request對象, 後臺組件往request對象中設定屬性。 服務端發生跳轉的時候,用戶不知道後臺跳

轉了哪些組件,不用重新發清求,請求沒有結束,request仍存在。 以該用戶請求對應的request拿屬性與參數,若還存在服務端

跳轉則繼續跳轉,若沒有服務端跳轉,請求結束,response就將結果信息(屬性與參數)回傳給瀏覽器。

●服務端跳轉,request對象中的數據可以進行共享傳遞

●如果是客戶端跳轉,跳轉到新頁面後是一 個新的請求,會重新創建一 個空的request對象,沒有屬性和參數,無法傳遞數據

優點:生存週期短,對內存沒有太大影響;服務端跳轉,安全;

用戶請求參數只在request裏放,其他內是對象拿不到請求參數

 

Session傳值

只要設置上去,則不管是什麼跳轉,都可以取得屬性

EMAIL  用戶需要先進行登陸,登陸成功之後,再編輯郵件

與session有關的任何打開的頁面都可以取得session

session的主要功能:用於驗證用戶是否登陸

一個應用——傳遞驗證信息:
有一個login.jsp,用戶輸入用戶名密碼後,此頁面將請求參數傳遞到了loginservlet,然後在這個頁面對
用戶名密碼通過request進行驗證,
若驗證通過,設置session屬性的falg,其值爲true,然後通過請求重定向進行客戶端跳轉,進入存取款界
面bank.jsp,
這時上一次請求已經結束,在此頁面中從session中getAttribute拿到flag屬性值,判斷是否爲true,若
是,則驗證是同一個用戶,纔可以進行存取
每一次存取都是不同的請求,若下一次進行存取,仍然依此session進行用戶驗證

 

page傳值

只能臨時存放數據,不能通過page傳值

page內置對象可以往其他內置對象中設置屬性:

(不要這麼寫,看懂即可)

pageContext.setAttribute(" password","ZS" ,PageContext.XXXXXXX) ;

◆public static final int APPLICATION_SCOPE -- application 對象

◆public static final int SESSION_SCOPE -- session對象

◆public static final int REQUEST_SCOPE -- request對象

 

Application傳值

所有用戶都可以存儲和取得信息,內存負擔過重,不安全。

 

結論對比下:
 Application存數據不安全,誰都可以訪問。而且他一直存在耗空間大
Page只能在本頁面纔有效,由於生命週期太短,所以一般不用他存數據
Session,生命週期是一個會話,時間由客戶端說的算,所以時間可能長而且效率低,所以session一般存客戶的信息如登陸的密碼等,而這些信息字節大小一般比較小,所以session用於存儲客戶信息。

Request,生命週期在一個請求中,請求結束就銷燬。所以request存數據安全,只有本request週期才能訪問,由於生命週期不是很長所以耗內存小。

綜上:request是存儲數據和傳遞數據的最好對象。Request用在服務端跳轉才能最好的利用他。

 

下一篇講九大內置對象各自的應用場景

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章