Cookie在Java中的使用
在現(xiàn)實生活中,當顧客第一次在超市購物,通常服務(wù)員會詢問是否辦理一張會員卡來積分以便日后折扣等福利活動。會員卡會記錄顧客的姓名、積分、消費記錄等信息,如果顧客要參與超市的福利活動等都需要提供會員卡,服務(wù)員在后臺刷卡查詢即可知道是哪個用戶在使用會員卡。
現(xiàn)在將現(xiàn)實生活中的案例中的角色互換一下。
當用戶沒有在Web服務(wù)器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務(wù)時,服務(wù)器會告知瀏覽器跳轉(zhuǎn)到登陸頁面進行用戶信息的登記操作,登錄完成之后,瀏覽器向服務(wù)器發(fā)起一次登陸請求,服務(wù)器將用戶的信息存儲到Cookie中,并響應(yīng)給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲到緩存區(qū)。
當用戶在Web服務(wù)器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務(wù)時,服務(wù)器會通過請求中攜帶的Cookie判斷此次請求時哪個用戶,并以這個Cookie的信息去查詢數(shù)據(jù)庫等操作,完成用戶需要的服務(wù)。
Cookie的必要HTTP是無狀態(tài)協(xié)議,意味著服務(wù)器不會在兩個請求之間保留任何數(shù)據(jù)(狀態(tài))。由于Web服務(wù)器要面對很多用戶的并發(fā)訪問,為了提高Web服務(wù)器對并發(fā)訪問的處理能力,在設(shè)計HTTP協(xié)議時規(guī)定Web服務(wù)器發(fā)送HTTP應(yīng)答報文和文檔時,不保存發(fā)出請求的Web瀏覽器進程的任何狀態(tài)信息,從而減輕服務(wù)器端的負載,同時無狀態(tài)也減小了HTTP請求的開銷。
但是在必要的場景,如登陸、購物等都需要保存用戶的狀態(tài)(信息),就不得不用到Cookie。
Cookie如何工作第一次訪問服務(wù)器,沒有Cookie,向服務(wù)器登記新的Cookie。
第二次及以后訪問服務(wù)器,有Cookie,無需登記新的Cookie。
需求分析:
當用戶訪問homepage.jsp時,判斷請求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉(zhuǎn)到登錄頁面進行用戶信息的登記。當用戶再次訪問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')) {// 如果用戶是第一次訪問個人主頁,就通知瀏覽器跳轉(zhuǎn)到登陸頁面進行登錄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');// 設(shè)置響應(yīng)內(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)容,更多關(guān)于Cookie的使用的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Docker與iptables及實現(xiàn)bridge方式網(wǎng)絡(luò)隔離與通信操作2. HTML <!DOCTYPE> 標簽3. python中scrapy處理項目數(shù)據(jù)的實例分析4. 基于PHP與XML的PDF文檔生成技術(shù)5. WWDC總結(jié):開發(fā)者需要知道的iOS 9 SDK新特性6. Python requests庫參數(shù)提交的注意事項總結(jié)7. 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實現(xiàn)方法8. ASP基礎(chǔ)入門第三篇(ASP腳本基礎(chǔ))9. jsp文件下載功能實現(xiàn)代碼10. AJAX的跨域問題解決方案
