Session常用方法(一)
session對象用來保存一些在與每個用戶回話期間需要保存的數據信息,這樣就方便了回話期間的一些處理程序。如可以用session變量記住用戶的用戶名,以后就不必在其他的網頁中重復輸入了。session對象的信息保存在服務器中,但ID保存在客戶機的Cookie中,如果客戶機不支持Cookie則轉為URL重寫,一般在使用session對象時不必考慮其實現的細節問題。
當用戶關閉了所有某個web服務器上的網頁時,則此服務器與客戶機的session對象以及其變量會自動消失。
Session對象的方法
一、JSP實現
實例1 記住回話的用戶名
新建sessionUserLogin.jsp,代碼如下:
<%@ page contentType="text/html;charset=gb2312"%> <script language="javascript"> function on_submit(){//驗證數據的合法性 if (form1.username.value == ""){ alert("用戶名不能為空,請輸入用戶名!"); form1.username.focus(); return false; } if (form1.userpassword.value == ""){ alert("用戶密碼不能為空,請輸入密碼!"); form1.userpassword.focus(); return false; } } </script> <%! public String codeToString(String str){//處理中文字符串的函數 String s=str; try{ byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s; }catch(Exception e){ return s; } } %> <% String username=request.getParameter("username"); String userpassword=request.getParameter("userpassword"); if(username!=null&userpassword!=null){ //如果用戶名和密碼都合法,則記下用戶名,一般把用戶和密碼存在數據庫中, //用數據庫中的信息與提交的用戶名和密碼比較以進行用戶合法性檢查, //這些內容在后續章節中會繼續學習 session.setAttribute("username",codeToString(username)); response.sendRedirect("sessionUserLogin1.jsp"); } %> <html> <head> <title>用戶登錄</title> </head> <body> <table aligin="center"> <form name="form1" method="post" action="sessionUserLogin.jsp" onsubmit="return on_submit()"> <tr aligin="center"> <td> 用戶登錄 </td> </tr> <tr aligin="center"> <td> 請輸入用戶名:<input type="text" name="username" size="20"> </td> </tr> <tr aligin="center"> <td> 請輸入密碼: <input type="password" name="userpassword" size="20"> </td> </tr> <tr aligin="center"> <td> <input type="submit" value="提交" name="B1"> <input type="reset" value="全部重寫" name="B2"> </td> </tr> </form> </table> </body> </html>
運行,然后輸入,結果如下:
然后新建sessionUserLogin1.jsp,代碼如下:
<%@ page contentType="text/html;charset=gb2312"%> <html> <head> <title>用戶登錄成功</title> </head> <body> 用戶登錄成功!<br> 你的用戶名是:<%=(String)session.getAttribute("username")%> </table> </body> </html>
點擊上面的“提交”,可以得到結果如下:
實例2 猜字母游戲
新建guessCharExample1.jsp,代碼如下:
<%@ page contentType="text/html;charset=gb2312"%> <html> <head> <title>猜字母游戲</title> </head> <body> 下面,我們一起來玩一個游戲:猜字母游戲<br> 游戲規則:電腦會隨機自動生成一個字母,請你猜出這個字母是什么。字母忽略大小寫。<br> <% String charString=new String("abcdefghijklmnopqrstuvwxyz"); int charNumber=((int)(Math.random()*100)+1)%26-1; Character TempCharacter=new Character(charString.charAt(charNumber)); session.setAttribute("TempCharacter",TempCharacter); %> <BR> <P>輸入你所猜的字母: <FORM action="guessResultExample1.jsp" method="post" name=form> <INPUT type="text" name="guesschar" > <INPUT TYPE="submit" value="提交" name="submit"> </FORM> </body> </html>
繼續新建guessResultExample1.jsp,代碼如下:
<%@ page contentType="text/html;charset=gb2312"%> <html> <head> <title>猜字母游戲</title> </head> <body> <% String tempString=request.getParameter("guesschar"); String TempCharacter=session.getAttribute("TempCharacter").toString(); if(tempString!=null){ if(TempCharacter.equalsIgnoreCase(tempString)) out.println("恭喜你,你猜對了!"); else out.println("你猜錯了,加油哦!"); } %> <BR> <P>輸入你所猜的字母: <FORM action="guessResultExample1.jsp" method="post" name=form> <INPUT type="text" name="guesschar" > <INPUT TYPE="submit" value="提交" name="submit"> </FORM> <a href="guessCharExample1.jsp">重新開始游戲</a> </body> </html>
運行結果如下:
二、 Servlet實現
實例3 服務器實現一個sension為一個用戶瀏覽器服務
服務器創建session出來后,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問服務器時,都會帶着session的id號去,服務器發現客戶機瀏覽器帶session id過來了,就會使用內存中與之對應的session為之服務。可以用如下的代碼證明:
package yqq.request.study; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF=8"); response.setContentType("text/html;charset=UTF-8"); //使用request對象的getSession()獲取session,如果session不存在則創建一個 HttpSession session = request.getSession(); //將數據存儲到session中 session.setAttribute("data", "隨意填寫"); //獲取session的Id String sessionId = session.getId(); //判斷session是不是新創建的 if (session.isNew()) { response.getWriter().print("session創建成功,session的id是:"+sessionId); }else { response.getWriter().print("服務器已經存在該session了,session的id是:"+sessionId); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
第一次訪問時,服務器會創建一個新的sesion,並且把session的Id以cookie的形式發送給客戶端瀏覽器
運行結果如下:
可以看出,不同客戶端(瀏覽器)訪問結果的session的id不同,並且第一次訪問為session創建成功,第二次訪問服務器已經存在該session,同一瀏覽器多次訪問id不變
關於session,未完待續......
參考資料 《java web輕量級開發全體驗》
參考網址 http://www.cnblogs.com/xdp-gacl/p/3855702.html