session對象表明一次用戶會話,一次用戶會話的含義是:從客戶端瀏覽器鏈接服務器開始,到客戶端瀏覽器與服務器斷開爲止,這個過程就是一個會話。session範圍內的屬性能夠在多個頁面的跳轉之間共享,一旦瀏覽器關閉,session就結束,session範圍內的屬性將所有丟失。
使用setAttribute(String attName, Object attValue)方法設置attName屬性的值爲attValue
使用getAttribute(String attName)方法返回session範圍內的attName屬性的值
一般只應該把與用戶會話狀態相關的信息放入session範圍內,不要僅僅爲了兩個頁面之間交換信息,就將信息放入session範圍內,若是僅僅爲了兩個頁面交換信息,能夠將該信息放入request範圍內,而後forward請求便可。
session機制一般用於保存客戶端狀態信息,這些狀態信息須要保存到Web服務器的硬盤上,因此要求session裏的屬性必須是可序列化的,不然將引起異常。
以下頁面session_order.jsp用於填寫購買的商品數量,提交後轉發到session_show.jsp頁面,在該頁面顯示用戶購買的各商品的數量, session_order.jsp頁面內容以下:html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>利用session對象保存在不一樣頁面間傳遞數據</title> </head> <body> <form method="post" action="session_show.jsp" target="_blank"> 書籍: <input type="text" name="book" /><br /> 電腦: <input type="text" name="computer" /><br /> 手機: <input type="text" name="phone" /><br /> <input type="submit" value="購買" /> </form> </body> </html>
session_show.jsp頁面內容以下:java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import = "java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>從session對象中讀取數據</title> </head> <body> <% Map<String, Integer> cart = (Map<String, Integer>)session.getAttribute("cart"); if(cart == null) { cart = new HashMap<String, Integer>(); cart.put("書籍", 0); cart.put("電腦", 0); cart.put("手機", 0); } Enumeration<String> products = request.getParameterNames(); while(products.hasMoreElements()) { String productName = products.nextElement(); if(productName.equalsIgnoreCase("book")) { int addNo = Integer.valueOf(request.getParameter(productName).trim()).intValue(); int oldNo = cart.get("書籍").intValue(); cart.put("書籍", oldNo + addNo); } else if(productName.equalsIgnoreCase("computer")) { int addNo = Integer.valueOf(request.getParameter(productName).trim()).intValue(); int oldNo = cart.get("電腦").intValue(); cart.put("電腦", oldNo + addNo); } else if(productName.equalsIgnoreCase("phone")) { int addNo = Integer.valueOf(request.getParameter(productName).trim()).intValue(); int oldNo = cart.get("手機").intValue(); cart.put("手機", oldNo + addNo); } } session.setAttribute("cart", cart); %> 您所購買的物品清單:<br /> <% Iterator it = cart.keySet().iterator(); while(it.hasNext()) { String key = (String)it.next(); %> <%=key + ":" + cart.get(key) + "<br />"%> <% } %> </body> </html>
點擊session_order.jsp頁面的"提交"按鈕後,跳轉到session_show.jsp頁面,在該頁面中能夠看到用戶購買的各商品數量,再次點擊"提交"按鈕或刷新session_show.jsp頁面,會看到用戶購買的各商品數量加倍。直到瀏覽器關閉。瀏覽器