Cookie在Java中的使用
在現(xiàn)實生活中,當顧客第一次在超市購物,通常服務員會詢問是否辦理一張會員卡來積分以便日后折扣等福利活動。會員卡會記錄顧客的姓名、積分、消費記錄等信息,如果顧客要參與超市的福利活動等都需要提供會員卡,服務員在后臺刷卡查詢即可知道是哪個用戶在使用會員卡。
現(xiàn)在將現(xiàn)實生活中的案例中的角色互換一下。
當用戶沒有在Web服務器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務時,服務器會告知瀏覽器跳轉到登陸頁面進行用戶信息的登記操作,登錄完成之后,瀏覽器向服務器發(fā)起一次登陸請求,服務器將用戶的信息存儲到Cookie中,并響應給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲到緩存區(qū)。
當用戶在Web服務器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務時,服務器會通過請求中攜帶的Cookie判斷此次請求時哪個用戶,并以這個Cookie的信息去查詢數(shù)據(jù)庫等操作,完成用戶需要的服務。
Cookie的必要HTTP是無狀態(tài)協(xié)議,意味著服務器不會在兩個請求之間保留任何數(shù)據(jù)(狀態(tài))。由于Web服務器要面對很多用戶的并發(fā)訪問,為了提高Web服務器對并發(fā)訪問的處理能力,在設計HTTP協(xié)議時規(guī)定Web服務器發(fā)送HTTP應答報文和文檔時,不保存發(fā)出請求的Web瀏覽器進程的任何狀態(tài)信息,從而減輕服務器端的負載,同時無狀態(tài)也減小了HTTP請求的開銷。
但是在必要的場景,如登陸、購物等都需要保存用戶的狀態(tài)(信息),就不得不用到Cookie。
Cookie如何工作第一次訪問服務器,沒有Cookie,向服務器登記新的Cookie。
第二次及以后訪問服務器,有Cookie,無需登記新的Cookie。
需求分析:
當用戶訪問homepage.jsp時,判斷請求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉到登錄頁面進行用戶信息的登記。當用戶再次訪問homepae.jsp時,不會被攔截,可以讓用戶訪問個人主頁頁面。
編寫代碼:
個人主頁的Servlet
@WebServlet(name = 'homepageServlet', urlPatterns = '/homepage')public class HomePageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();for (Cookie cookie : cookies) { if (!cookie.getName().equals('username')) {// 如果用戶是第一次訪問個人主頁,就通知瀏覽器跳轉到登陸頁面進行登錄resp.sendRedirect(req.getContextPath() + '/login.jsp'); }} }}
用戶登錄的Servlet
@WebServlet(name = 'loginServlet', urlPatterns = '/login')public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 獲取http請求參數(shù)usernameString username = request.getParameter('username');// 設置響應內(nèi)容的類型response.setContentType('text/html;charset=utf-8');// 獲取Cookie值Cookie[] cookies = request.getCookies();for (Cookie cookie : cookies) { if (!cookie.getName().equals('username')) { // 用戶第一次訪問Cookie userCookie = new Cookie('username', username);userCookie.setMaxAge(300);response.addCookie(userCookie); } response.sendRedirect(request.getContextPath() + '/homepage.jsp');} }}
打開瀏覽器,實驗一下:
在第一次訪問homepage頁面時,看到瀏覽器緩存區(qū)并沒有名為username的Cookie,只有當?shù)卿浿螅瑸g覽器緩存區(qū)才有了這個Cookie。
以上就是Cookie在Java中的使用的詳細內(nèi)容,更多關于Cookie的使用的資料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. Python安裝并操作redis實現(xiàn)流程詳解2. 部署vue+Springboot前后端分離項目的步驟實現(xiàn)3. Django如何使用asyncio協(xié)程和ThreadPoolExecutor多線程4. AspNetCore&MassTransit Courier實現(xiàn)分布式事務的詳細過程5. 如何用 Python 制作一個迷宮游戲6. vue組件庫的在線主題編輯器的實現(xiàn)思路7. idea設置自動導入依賴的方法步驟8. AJAX實現(xiàn)數(shù)據(jù)的增刪改查操作詳解【java后臺】9. 網(wǎng)頁中img圖片使用css實現(xiàn)等比例自動縮放不變形(代碼已測試)10. JavaScript實現(xiàn)組件化和模塊化方法詳解
