1. 程式人生 > 其它 >request.setAttribute()和session.setAttribute()的區別詳解

request.setAttribute()和session.setAttribute()的區別詳解

我們在Servlet和頁面間傳值時,經常會用到request.setAttribute()和session.setAttribute(),下面是兩段示例用法

request.setAttribute()

    request.setAttribute("people",people); //第一個people是一個字串,第二個是一個集合型別物件
            request.getRequestDispatcher("chakan.jsp").forward(request, response);
            //response.sendRedirect("chakan.jsp");   
//傳過去的值會是null, //sendRedirect不能傳遞request物件。使用request.setAttribute時不能使redirect而是forward。即是將請求轉發而不是重定向。

request.setAttribute()和request.getAttribute()配對使用,作用域是請求和被請求頁面之間。request.setAttribute()是隻在此action的下一個forward需要使用的時候使用;request.getAttribute()表示從request範圍取得設定的屬性,必須要先setAttribute設定屬性,才能通過getAttribute來取得,設定與取得的為Object物件型別。

request.setAttribute這個的生命週期就是request級別的,傳輸快,生命週期短,只能在特定頁面接受。

session.setAttribute()

 HttpSession session = request.getSession();
             session.setAttribute("people",people); //第一個people是一個字串,第二個是一個集合型別物件
             response.sendRedirect("chakan.jsp"); //傳送請求

(jsp)ArrayList <Information> B = (ArrayList<Information>) session.getAttribute("people"); //只需要在需要的頁面get就好了

session.setAttribute()和session.getAttribute()配對使用,作用域是整個會話期間,在所有的頁面都使用這些資料的時候使用,session可以跨越很多頁面,session的生命週期也是針對一個客戶端,但是卻是在別人設定的會話週期內(一般是20-30分鐘),session裡邊的內容將一直存在,即便關閉了這個客戶端瀏覽器 session也不一定會馬上釋放掉的。session就相當一個全域性變數。

session.setAttribute():取得當前HttpSession,在HttpSession範圍儲存引數,就一直在,隨時可以取來用。缺點是比較佔用資源。

這些就是我個人的實踐和結合閱讀其他相似內容的間接,有錯誤歡迎指正!