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沒有過期,就會顯示登錄信息。
作者“極致書生”