在之前很长一段时间里,<em>intel</em>牙膏厂都被吐槽不思进取,内存和CPU超频特性只开放给高端芯片组。而AMD锐龙面世后的全面开放超频的姿态,比<em>intel</em>高到不知哪里去了。随着AMD CPU市场的步步紧逼,<em>Intel
2021-05-17 13:01:41
Cookies定義:Cookies是儲存在使用者端計算機上的文字檔案,並保留了使用者的各種跟蹤資訊。
Cookies作用:對談保持,如完成使用者的登入與狀態保持
Cookies的工作原理:
使用者端向服務區發起登入請求
伺服器指令碼(程式碼)向瀏覽器傳送一組Cookies,例如:姓名,年齡等
瀏覽器將這些資訊儲存在本地計算機上,以備將來使用
當下一次瀏覽器向web伺服器傳送任何請求時。瀏覽器會把這些Cookies資訊傳送到伺服器,伺服器將使用這些資訊來識別賬戶
Cookies通常設定在HTTP頭資訊中,設定Cookie的http請求,會向Servlet傳送如下資訊
如果使用者端的瀏覽器指向任何匹配該Cookie的路徑和域的頁面,他會重新傳送Cookie到伺服器,瀏覽器的頭資訊可能會如下:
此時Servlet就能夠通過請求方法request.getCookies()存取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("<h1>Cookie 設定成功</h1>"); } @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("<h1>Cookie key: %s,Cookie value: %s</h1>",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物件
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("<h1>歡迎存取頁面</h1>"); //輸出sessionID writer.println(String.format("<h3>SessionID : %s </h3>",sessionID)); //輸出session的建立時間,因為session的建立時間是一個時間戳,所以我們需要將其強轉成我們能看得懂的時間 writer.println(String.format("<h3>Session建立時間: %s</h3>",new Date(session.getCreationTime()))); //輸出session的最後存取時間 writer.println(String.format("<h3>Session的最後存取時間: %S</h3>",new Date(session.getLastAccessedTime()))); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
到此這篇關於淺談Servlet的Cookie和Session機制的文章就介紹到這了,更多相關Servlet的Cookie和Session內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
在之前很长一段时间里,<em>intel</em>牙膏厂都被吐槽不思进取,内存和CPU超频特性只开放给高端芯片组。而AMD锐龙面世后的全面开放超频的姿态,比<em>intel</em>高到不知哪里去了。随着AMD CPU市场的步步紧逼,<em>Intel
2021-05-17 13:01:41
这一武器最早应用于<em>英特尔</em>著名战役--“粉碎行动”。在这场<em>英特尔</em>与摩托罗拉的企业级圣战中,OKR成功帮助<em>英特尔</em>绝地反击,打败了摩托罗拉。从此,OKR成为<em>英特尔</em>公司运营的支柱。1971年至
2021-05-17 13:01:37
2020年10月,<em>英特尔</em>宣布以90亿美元的价格,将旗下NAND闪存业务出售给SK海力士,震惊业界。但事实上,与其说是出售,不如说换个方式独立运营,<em>英特尔</em>并未放弃对于NAND闪存的投入,仍然持续推进相关产品和技术,去年
2021-05-17 13:01:30
一体机相对台式机的优势在于,一体机能够有效节省空间,尤其是对于企业来讲,能够有效提升办公空间的利用效率,近两年,<em>AMD</em>锐龙“G”系列带有高性能集显的APU深受广大的OEM厂商青睐,首先Zen架构和7nm制程的优势
2021-05-17 13:01:11
这款手机将采用多彩配色,将会搭载<em>安卓</em> 11 系统,配备 4GB 内存。根据互联网上的公开资料显示,Android 11正式版系统在2020年9月9日正式发布。系统主要增强了聊天气泡,安全性和隐私性的保护,电源菜单,可以更好地支持
2021-05-17 13:00:57
该工具所用到的脚本既可以用纯SQL(支持多种SQL语法),又能够用Java(主要用于更复杂的转换)来进行编写。同时,它既带有命令行客户端,又提供支持Maven和Gradle的插件。此外,它的Java API,还适用于<em>Android</em>系统。Flywa
2021-05-17 13:00:48