Request與Session的存值取值操作

Request與Session的存值取值

request域的存值:

request可以直接set進去

request.setAttribute("request", value);

request域的取值有兩種方式:

"${request}"
------------
"${requestScope.request}"

或者想獲取key值中某一個valueBean對象

"${request.name}"

session域的存值:

session需要先get一下獲取session然後才能set進去key,value值

request.getSession().setAttribute("session", value);
----------------------------------------------------
HttpSession session = request.getSession();
session.setAttribute("session", value);

session域的取值:

"${sessionScope.session}"

Request和Session的區別

說簡單點 request對象和session對象的最大區別是生命周期。

request

request范圍較小一些,隻是一個請求。

request對象的生命周期是針對一個客戶端(說確切點就是一個瀏覽器應用程序)的一次請求,當請求完畢之後,request裡邊的內容也將被釋放點 。

簡單說就是你在頁面上的一個操作,request.getParameter()就是從上一個頁面中的url、form中獲取參數。

但如果一個request涉及多個類,後面還要取參數,可以用request.setAttribute()和request.getAttribute()。

但是當結果輸出之後,request就結束瞭。

session

session可以跨越很多頁面。

而session的生命周期也是針對一個客戶端,但是卻是在別人設置的會話周期內(一般是20-30分鐘),session裡邊的內容將一直存在,即便關閉瞭這個客戶端瀏覽器 session也不一定會馬上釋放掉的。

可以理解是客戶端同一個IE窗口發出的多個請求。

這之間都可以傳遞參數,比如很多網站的用戶登錄都用到瞭。

比較

request占用資源比較少,安全性也比較高,可是相對來說缺乏持續性。

session則相對來說對資源的消耗會大點,安全性相對來說也會稍微低點,可是它能實現比如會話跟蹤技術。

如果可以使用request的情況下,盡量使用request 因為相對於服務器來說資源的消耗還是比較重要的。

在傳遞頁面過程中request傳遞到下一頁面就不能再傳遞瞭,而sesison卻不如此,即request僅限於2個相鄰的頁面

每按一個網頁上的一個鏈接就是一個新的request,當服務器返回給瀏覽器一個response時,request就結束瞭,此時保存在request中的對象就不存在瞭,

但是當你用一個瀏器連到服務器上時application-server會新開一個session給你,當連接超時或瀏覽器關閉時session才銷毀。

所以說作用的范圍是不一樣,session也就可以跟蹤用戶的狀態。

session相當於是一個客戶端的全局變量,

比如A機與服務器第一次訪問時設置session.setAttribute(“aaa”)=”ComputerA”.則在A機訪問繼續訪問的任意一個頁面都可以取的session.getAttribute(“aaa”)的值是ComputerA;

request是某一次訪問的局域變量,

生命周期隻是一次請求。因此login的變量應該放在session中

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: