我們在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范圍保存參數,就一直在,隨時可以取來用。缺點是比較占用資源。
這些就是我個人的實踐和結合閱讀其他相似內容的間接,有錯誤歡迎指正!