走進WEB存儲對象之HttpSession – JAVA編程語言程序開發技術文章

HttpSession快速熱身
HttpSession 表示一次回話,用來維持客戶端用戶的狀態信息。
當用戶打開瀏覽器,訪問某個網站時,服務器就會在服務器的內存為該瀏覽器分配一個空間,該空間被瀏覽器獨占,這個空間就是session空間,該空間中的數據默認存在時間為30min,對於一個瀏覽器而言,不同的頁面能夠共享session空間的數據。
我們可以通過方法public int getMaxInactiveInterval()查看新建的session對象的有效時間。
可以通過下面兩種方式指定session的有效時間。
1.在web.xml配置文件中增加如下配置
<session-config >
     <session-timeout>20</session-timeout>
</session-config >
2. 創建session對象後通過調用public void setMaxInactiveInterval(int time)這個方法設置session的有效時間。
 
當某個瀏覽器訪問網站時,服務器會給瀏覽器分配一個唯一的session id並以此來區分不同的瀏覽器(即客戶端)。
 
Cookie機制是默認的session管理策略,如果禁止web瀏覽器的cookie功能,將無法獲得session id。
 
一個簡單基於session的用戶登錄狀態信息的管理的小程序
 
1. 創建一個普通的web工程。
2. 在src文件夾下建立包名為com.neusoft.httpsession的包,再在該包下創建名為HttpSessionTest的servlet,內容如下:
————————————————————————————————————
package com.neusoft.httpsession;
import java.io.IOException;
import java.io.PrintWriter;
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 HttpSessionTest extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       this.doPost(request, response);
 
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       request.setCharacterEncoding("gb2312");
       response.setCharacterEncoding("gb2312");
       PrintWriter out = response.getWriter();
       String userName = request.getParameter("userName");
       String userPassWord = request.getParameter("userPassWord");
       // 沒有登錄請求的情況或者沒有通過登錄頁面直接請求本頁面的情況
       if ((userName == "" && userPassWord == "")
              || (userName == null && userPassWord == null)) {
           HttpSession session = request.getSession(true);
           // 從session對象中取到用戶名
           String name = (String) session.getAttribute("name");
           // 如果name不為空說明用戶已經登錄
           if (name != null) {
              out.println(name + "已經登錄!");
           } else {
              // 如果用戶名為空則跳轉到登錄頁面
              response.sendRedirect("/Test/index.jsp");
           }
       } else if (userName == "" || userPassWord == "") {
           // 如果用戶名或密碼沒有輸入時則跳轉到登錄頁面
           response.sendRedirect("/Test/index.jsp");
       } else {// 有登錄請求的情況,創建session,並從session中取出name並顯示
           HttpSession session = request.getSession(true);
           session.setAttribute("name", userName);
           String name = (String) session.getAttribute("name");
           out.println(name + "已經登錄!");
       }
       out.flush();
       out.close();
    }
}
————————————————————————————————————
該servlet在web.xml配置文件中的配置信息如下:
————————————————————————————————————
  <servlet>
    <servlet-name>HttpSessionTest</servlet-name>
    <servlet-class>com.neusoft.httpsession.HttpSessionTest</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>HttpSessionTest</servlet-name>
    <url-pattern>/servlet/HttpSessionTest</url-pattern>
  </servlet-mapping>
————————————————————————————————————
登錄頁面中的表單內容如下:
<form action="/Test/servlet/HttpSessionTest " method="post">
  <label>姓名:</label>
  <input type="text" name="userName"><br>
  <label>密碼:</label>
  <input type="password" name="userPassWord"><br>
  <input type="submit" value="確定">
  <input type="reset" value="重置">
  </form>
————————————————————————————————————
3.重新發佈工程,在瀏覽器中輸入http://localhost:8080/Test/彈出登錄窗口,輸入用戶名和密碼(此處沒有校驗),就會跳轉到servlet處理頁面,並顯示“**已經登
錄!“的信息,用戶名或者密碼為空或者都為空都重新跳轉到登錄頁面。
 
如果客戶端沒有登錄過,直接訪問http://localhost:8080/Test/servlet/HttpSessionTest,服務器會從session中取“name“的值,該值為空值,說明用戶沒有登陸過或session
已經過期,就會跳轉到登錄頁面。
 
如果客戶端已經登陸過,並且session對象也沒有過期,瀏覽器沒有關閉過,如果客戶端直接訪問http://localhost:8080/Test/servlet/HttpSessionTest,服務器會從session中
取“name“的值,該值不為空,說明用戶登陸過並且session沒有過期,就會顯示登錄信息。
 

作者“極致書生”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *