二、servlet不同頁面共享數據的四中方式

一、同一個用戶不同頁面共享數據

(1)sendRedirect()跳轉
(2)隱藏表單提交(form)。
(3)session技術。
(4)cookie技術。

下面介紹這四種方式共享數據各自特點:
1,sendRedirect()跳轉:
通過該方法可以將一個頁面的信息傳入到另外一個頁面
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);

優點:傳送信息的速度比較快。
缺點:它只能傳送字符串,不能傳遞對象。
注意點:

  1. Wel代表你要傳遞那個servlet的url。
  2. servlet的url名和變量之間有個,變量名=之間不要有空格。
  3. 如果傳遞2個以上的值之間用&分割;比如:resp.sendRedirect(“Wel?username=” + name + “&pwd=” + pwd);
  4. 如果傳遞的是中文,需要處理一下防止亂碼,resp.setContentType(“text/html,charset=gbk”);

2,隱藏表單提交(form)
這是最常見的一種方式,但有時特別有用。

例如:value變量可以隱士傳遞表單參數。

String value="123";
<form action ='login' method='post'>
<intput type='hidden' name ='a' value ="+value+"/>
</form>

3,session技術

(1) 什麼是session?

這裏寫圖片描述

(2) session有哪些用處?

  1. 網上商城購物車。
  2. 保存用戶登錄的信息。
  3. 將用戶信息保存到session中,供其他頁面使用。
  4. 防止用戶非法訪問某個頁面。
    。。。。。。等等。

舉例:防止非法訪問某個頁面

如果用戶信息驗證合法,則向服務器寫入session,正常頁面跳轉邏輯:

HttpSession session = req.getSession(true);
// 向session中添加某個屬性
session.setAttribute("pass", "ok");
// 設置超時時間。
session.setMaxInactiveInterval(20);
// 跳轉歡迎界面。
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);

非法訪問處理,如果非法訪問pass=null 則跳轉到登錄頁面。

HttpSession session = req.getSession();
        try {
            String pass = (String) session.getAttribute("pass");
            if (pass == null) {
                resp.sendRedirect("Login");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

(3)對session的理解

這裏寫圖片描述

(4)session的使用

  1. 獲得session
    HttpSession session = req.getSession(true);
  2. 向session中添加某個屬性
    session.setAttribute(String name, Object obj);
  3. 從session中得到某個屬性
    session.getAttribute(String name);
  4. 從session中移除某個屬性
    session.removeAttribute(String name);
  5. 註銷session中的內容(比較安全的一種方式)
    session.setMaxInactiveInterval(0);

(5) session的注意事項:

  1. session默認保存的時間30min,當然也可以修改①web.xml修改。②代碼修改。
    // 設置超時時間。
    session.setMaxInactiveInterval(20);

  2. 30min指的是用戶閒置時間,而不是累計時間。

  3. 當某個瀏覽器訪問網站時,服務器會給瀏覽器分配一個唯一的sessionId,並以此區分不通瀏覽器。
  4. 因爲session的各個屬性要佔用服務器內存,因此逼不得已下才使用。

4、cookie技術

(1)什麼是cookie

服務器在客戶端保存的用戶信息。比如登錄名、密碼等等就是cookie,服務器在需要的時候可以從客戶端進行讀取,當再次訪問服務器的時候可以在一定時間內不用重複登錄。
這裏寫圖片描述

(2)cookie的使用

  1. 創建cookie

    Cookie cookie=new Cookie(String name, String value);

  2. 將cookie添加到客戶端。
    response.addCookie(cookie);

  3. 讀取cookie
    request.getCookie();

  4. 刪除cookie
    tempCookie對象調用setMaxAge(0)方法,設置cookie存在時長0秒。

注意:必須設置cookie有效時長,才能保存在客戶端,即調用setMaxAge(int second) 方法,這裏的second是累計時間。

舉例說明cookie的使用

  • 保存cookie到客戶端
    // 在服務器創建一個cookie
    Cookie cookie = new Cookie("color", "red");
    // 設置cookie存在時間30s(必須設置有效時長,才能保存在客戶端)
    cookie.setMaxAge(30);
    // 保存cookie到客戶端
    resp.addCookie(cookie);
    System.out.println("保存到color cookie到客戶端");

  • 服務端讀取cookie

// 獲取cookie
        Cookie[] cookies = req.getCookies();
        if (null != cookies) {
            for (int i = 0; i < cookies.length; i++) {
                Cookie tempCookie = cookies[i];
                if (tempCookie.getName().equals("color")) {
                    String value = tempCookie.getValue();
                    System.out.println("保存color cookie value=" + value);
                    // 刪除color cookie
                    tempCookie.setMaxAge(0);
                    break;
                }
            }
        } else {
            System.out.println("客戶端不存在color cookie");
        }

二、session和cookie的比較

  1. 存在位置
    session保存在服務端,cookie保存在客戶端。
  2. 安全性
    cookie的安全性比session弱。
  3. 網絡傳輸量
    cookie通過網絡在客戶端與服務器端傳輸,session保存在服務器端,不需要傳輸。
  4. 生命週期
    session的時間是閒置時間,如果客戶端再次訪問服務器session會重新計時,服務器銷燬時session失效;cookie是累計時間,服務器關閉時,cookie仍然保存在客戶端,除非cookie累計超時。

最後我做了一個關於cookie的保存在客戶端的demo:
http://download.csdn.net/detail/tianyejun6/9726756

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章