JSP Session.getAttribute()方法:根據屬性名獲取屬性值

2020-07-16 10:04:59
該方法用於獲取與指定名字相聯絡的屬性值。

語法:

getAttribute(String name)

引數說明:
  • name:要獲取的屬性名稱。

返回值:name 指定的屬性的值。

範例

獲取儲存在 session 物件中名稱為 user 的屬性資訊,關鍵程式碼如下:
<%
  session.getAttribute("user");
%>

典型應用

  1. session 在網路術語中被稱為對談。由於 HTTP 協定是一種無狀態協定,也就是當一個客戶向伺服器發出請求,伺服器接收請求,並返回響應後,該連線便結束,而伺服器並不儲存相關的資訊。為了彌補這一缺點,HTTP 協定提供了 session。
  2. 通過 session,當使用者需要在應用程式的 Web 頁間進行跳轉時,可以儲存使用者的狀態,使整個使用者對談一直存在下去,直到關閉瀏覽器。但是,如果在一個對談中,用戶端長時間不向伺服器發出請求,session 物件就會自動消失。這個時間取決於伺服器,例如,Tomcat 伺服器預設為 30 分鐘。不過這個時間可以通過編寫程式進行修改。使用 session 物件一個最常用的功能就是記錄使用者的狀態。
  3. 下面將通過一個具體的範例介紹應用 session 物件實現使用者登入。執行本範例,首先進入的是使用者登入頁面,輸入使用者名稱(mr)和密碼(mrsoft)後,單擊“登入”按鈕,將顯示系統主頁,如果輸入使用者名稱"mr",密碼不輸入"mrsoft",則重新返回到使用者登入頁面。

建立 index.jsp 檔案,在該檔案中,新增用於收集使用者登入資訊的表單及表單元素,關鍵程式碼如下:
<form name="form1" method="post" action="">
  使用者名稱:<input name="name" type="text" id="name" style="width:120px"><br>
  密&nbsp;&nbsp;碼:<input name="pwd" type="password" id="pwd" style="width:120px"><br>
  <br>
  <input type=" submit" name="Submit" value="提交">
</form>
編寫 deal.jsp 檔案,在該檔案中,模擬使用者登入(這裡將使用者資訊儲存到一個二維陣列中),如果使用者登入成功,將使用者名稱儲存到 session 範圍內的變數中,並將頁面重定向到 main.jsp 頁面,否則將頁面重定向到 index.jsp 頁面,重新登入。deal.jsp 檔案的具體程式碼如下:
<%@page language="java" contentType="text/html;charset=GB18030" pageEncoding="GB18030"%>
  <%@page import = "java.util.*"%>
  <%
    String[][] userList = {{"mr","mrsoft"},{"wgh","111"},{"sk","111"}};  //定義一個儲存使用者列表的二維陣列
    boolean flag = false;  //登入狀態
    request.setCharacterEncoding("GB18030");  //設定編碼
    String username = request.getParameter("username");  //獲取使用者名稱
    String pwd = request.getParameter("pwd");  //獲取密碼
    for(int i=0;i<userList.length;i++){  //遍歷二維陣列
      if(userList[i][0].equals(username)){  //判斷使用者名稱
        if(userList[i][1].equals(pwd)){  //判斷密碼
          flag = true;  //表示登入成功
          break;  //跳出for迴圈
        }
      }
    }
      if(flag){  //如果值為true,表示登入成功
        session.setAttribute("username",username);  //儲存使用者名稱到session範圍的變數
        response.sendRedirect("main.jsp");  //跳轉到主頁
      }else{
        response.sendRedirect("index.jsp");  //跳轉到使用者登入頁面
      }
  %>
編寫 main.jsp 檔案,在該檔案中,首先獲取並顯示儲存到 session 範圍內的變數,然後新增一個“[退出]”超連結。main.jsp 檔案的具體程式碼如下:
<%@page language="java" contentType="text/html;charset=GB18030"pageEncoding="GB18030"%>
  <%
     String username = (String)session.getAttribute("username");  //獲取儲存在session範圍內的使用者名稱
   %>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=GB18030">
        <title>系統主頁</title>
      </head>
      <body>
        您好![<%=username%>]歡迎您存取!<br>
        <a href="exit.jsp">[退出]</a>
      </body>
    </html>
編寫 exit.jsp 檔案,在該檔案中銷毀 session,並重定向頁面到 index.jsp 頁面。exit.jsp 檔案的具體程式碼如下:
<%@page language="java" contentType="text/html;charset=GB18030" pageEncoding="GB18030"%>
  <%
     session.invalidate();  //銷毀session
     response.sendRedirect("index.jsp");  //重定向頁面到index.jsp
   %>
執行結果如下: