JSP常用內建物件——session物件
1.session物件定義
session物件用於儲存特定的使用者會話所需的資訊。當用戶在應用程式的Web頁之間跳轉時,儲存在sesion物件中的變數將不會丟失,而是在整個使用者會話中一直存在。
當用戶請求來自應用程式的Web頁時,如果該使用者還沒有會話,則Web伺服器將自動建立一個session物件。當會話過期或被放棄後,伺服器將終止該會話。
具體解釋為:
session物件用來儲存每個使用者的資訊,以便跟蹤每個使用者的操作狀態。其中,session資訊儲存在容器裡,session的ID儲存在客戶計算機的Cookie中。使用者首次登入系統時容器會給使用者分配一個位於一個的session id標識用於區別其他的使用者。當用戶退出系統時,這個session就會自動消失。
當一個使用者首次訪問伺服器上的一個JSP頁面時,JSP引擎產生一個session物件,同時分配一個String型別的ID號,JSP引擎同時將這個ID號傳送到客戶端,存放在Cookie中,這樣session物件和使用者之間就建立了一一對應的關係。當用戶再訪問連線該伺服器的其他頁面時,不再分配給使用者新的session物件。直到關閉瀏覽器後,伺服器端該使用者的session物件才取消,和使用者的對應關係也一併消失。當重新開啟瀏覽器再連線到該伺服器時,伺服器會為該使用者再建立一個新的session物件。
2.session物件常用的方法
(1)setAttribute(String name,java.lang.Object value):用於設定指定名字的屬性值,並且
(2)getAttribute(String name):用於獲取與指定名字相聯絡的屬性,如果屬性不存在,將會返回null;
(3)getAttributeNames():用於返回session物件中儲存的每一個屬性物件,結果集是一個Enumeration類的例項;
(4)removeAttribute(String name):用於刪除指定的屬性(包含屬性名、屬性值)。如果在有效時間內,使用者做出新的請求,那麼伺服器就會將其看作一個新的使用者,此時,伺服器將建立一個新的session,舊的session資訊將會丟失;
3.session物件應用例項
(1)實現獲取頁面的訪問次數
<%@ 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>Insert title here</title> </head> <body> <% int number=1000; //從session物件獲取number Object obj=session.getAttribute("number"); if(obj==null){ //設定session物件的變數值 session.setAttribute("number",String.valueOf(number)); //String.valueOf(number)是將number轉化成String字串型別 }else{ //取得session物件中的number變數 number=Integer.parseInt(obj.toString()); //Integer.parseInt()是把()裡的內容轉換成整數。 //obj.toString()是將obj物件轉化為一個字串並返回結果。 //統計頁面訪問次數 number+=1; //設定session物件的number變數值 session.setAttribute("number",String.valueOf(number)); } %> 你是第<%=number %>個使用者訪問本網站 </body> </html>
對應結果的圖片為
不斷重新整理獲得的結果為
(2)session綜合方法例項
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.Date" %> <!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>Insert title here</title> </head> <body> <hr> session的建立時間是:<%=session.getCreationTime() %>  <%=new Date(session.getCreationTime()) %> <br> session的Id號:<%=session.getId()%> <br> 客戶最近一次訪問時間是:<%=session.getLastAccessedTime() %>  <%=new java.sql.Time(session.getLastAccessedTime()) %> <br> <%=session.getMaxInactiveInterval() %> <br> 是否新建立的session:<%=session.isNew()?"是":"否" %> <hr> <% session.setAttribute("name","星火天涯"); session.setAttribute("password","666666"); %> 姓名:<%=session.getAttribute("name") %> <br> 密碼:<%=session.getAttribute("password") %> <br> ID號:<%=session.getId() %> <br> <% session.setMaxInactiveInterval(500); %> 最大有效時間:<%=session.getMaxInactiveInterval() %> <br> <% session.removeAttribute("name"); %> 姓名:<%=session.getAttribute("name") %> <hr> </body> </html>
對應的結果圖片為
重新整理獲得的結果為
(3)模擬網上購物,建立登入頁面——login.jsp,購物頁面——shop.jsp,結賬頁面——account.jsp
登入頁面——login.jsp
<%@ 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>登入頁面</title> </head> <body> <% session.setAttribute("customer","客戶"); //為customer變數傳值“客戶” %> <h3>請先登入後購物:</h3> <hr> <form action="shop.jsp" method="get"> 客戶名:<input type="text" name="loginName"> <input type="submit" value="提交"> </form> </body> </html>
購物頁面——shop.jsp
<%@ 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>購物頁面</title> </head> <body> <% String na=request.getParameter("loginName"); session.setAttribute("name",na); %> <h3>請輸入想購買的商品:</h3> <hr> <form action="account.jsp" method="get"> 要購買的商品:<input type="text" name="goodsName"> <input type="submit" value="購物"> </form> </body> </html>
結賬頁面——account.jsp
<%@ 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>結賬</title> </head> <body> <% String gn=request.getParameter("goodsName"); session.setAttribute("goods",gn); String 客戶=(String)session.getAttribute("customer"); String 姓名=(String)session.getAttribute("name"); String 商品=(String)session.getAttribute("goods"); %> <h3>結賬資訊:</h3> <hr> <%=客戶 %>的姓名是:<%=姓名 %> <br> 你購買的是商品是:<%=商品 %> </body> </html>