您好,登錄后才能下訂單哦!
本篇內容介紹了“Java Servlet中的Cookie和Session機制怎么應用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Cookies定義:Cookies是存儲在客戶端計算機上的文本文件,并保留了用戶的各種跟蹤信息。
Cookies作用:會話保持,如完成用戶的登錄與狀態保持
Cookies的工作原理:
客戶端向服務區發起登錄請求
服務器腳本(代碼)向瀏覽器發送一組Cookies,例如:姓名,年齡等
瀏覽器將這些信息存儲在本地計算機上,以備將來使用
當下一次瀏覽器向web服務器發送任何請求時。瀏覽器會把這些Cookies信息發送到服務器,服務器將使用這些信息來識別賬戶
Cookies通常設置在HTTP頭信息中,設置Cookie的http請求,會向Servlet發送如下信息
Set-Cookie頭包含了一個名稱值對,一個GMT日期,一個路徑和一個域,名稱和值都會被URL編碼
expires字段是一個命令,告訴瀏覽器在給定的時間和日期之后過去(“忘記”)該Cookie
如果瀏覽器被配置為存儲Cookies,他將會保留此信息知道到期日期
如果用戶端的瀏覽器指向任何匹配該Cookie的路徑和域的頁面,他會重新發送Cookie到服務器,瀏覽器的頭信息可能會如下:
此時Servlet就能夠通過請求方法request.getCookies()訪問Cookie,該方法將返回一個Cookie對象的數組
具體步驟,創建兩個后端類,分別為:
設置cookie信息
獲取cookie信息
設置cookie信息代碼
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class SetCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.創建Cookie對象
//首先需要一個cookie對象,這里我們需要兩個cookie對象,一個來存儲用戶名(username——java),一個來存儲密碼(pwd——javas)
Cookie username = new Cookie("uesrname","java");
Cookie pwd = new Cookie("pwd","javas");
//當我們創建好兩個cookie對象之后,就可以對這兩個對象進行一系列操作
//比如:設置他的過期時間,這里我們將username的過期時間設置為永久
username.setMaxAge(-1);
//密碼pwd的過期時間設置為一分鐘,注意他的過期時間是以秒為單位
pwd.setMaxAge(60);
//2.將 Cookie 對象關聯到response上
resp.addCookie(username);
resp.addCookie(pwd);
//顯示給用戶部分的信息
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
//然后寫入響應給客戶端的內容
PrintWriter writer = resp.getWriter();
writer.println("<h2>Cookie 設置成功</h2>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
注意:一定不要忘記配置web.xml文件
獲取cookie信息代碼
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class GetCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//讀取Cookie的信息
//因為客戶端的cookie可能會有多個,所以我們使用數組來接收,注意:cookie是從request獲取的
Cookie[] cookies = req.getCookies();
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
//然后讀取cookie的內容
for (Cookie item: cookies
) {
writer.println(String.format("<h2>Cookie key: %s,Cookie value: %s</h2>",item.getName(),item.getValue()));
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
注意:
1.不要忘記配置web.xml文件
2.因為上面我們設置cookie信息的時候,pwd的過期時間為一分鐘,當我們要去獲取cookie信息的時候就看時間不夠,所以建議修改更長的過期時間。
Session定義:session是存儲在服務器上的文本文件,并保留用戶的各種跟蹤信息
Session作用:會話保持,如完成用戶的登錄與狀態保持,因為在服務器端,所以相對安全一些。
Session在Servlet里的存儲形式
session是借助cookie實現的
HttpSession對象
Servlet提供了HttpSession接口,該接口提供了一種跨多個頁面請求或訪問網站時識別用戶以及存儲有關用戶信息的方式
Servlet容器使用這個接口來創建一個HTTP客戶端和HTTP服務器之間的session會話,會話持續一個指定的時間段。跨多個連接或頁面請求
可以通過調用HttpServletRequest的公共方法 getSession() 來獲取 HttpSession對象(如:HttpSession session = request.getSession()),需要在向客戶端發送任何文檔內容之前調用 request.getSession()
HttpSession 對象中可用的幾個重要的方法:
小知識點:session都是通過request進行操作,而cookie是通過request和response進行操作。
關于session的讀寫操作代碼
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//關于 session 的讀寫
//1.先獲取到session到對象
HttpSession session = req.getSession();
//2.得到session的屬性
//2.1獲取到session的ID
String sessionID = session.getId();
//返回響應信息
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h2>歡迎訪問頁面</h2>");
//輸出sessionID
writer.println(String.format("<h4>SessionID : %s </h4>",sessionID));
//輸出session的創建時間,因為session的創建時間是一個時間戳,所以我們需要將其強轉成我們能看得懂的時間
writer.println(String.format("<h4>Session創建時間: %s</h4>",new Date(session.getCreationTime())));
//輸出session的最后訪問時間
writer.println(String.format("<h4>Session的最后訪問時間: %S</h4>",new Date(session.getLastAccessedTime())));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
“Java Servlet中的Cookie和Session機制怎么應用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。