- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Cookie在Java中的使用
在現實(shí)生活中,當顧客第一次在超市購物,通常服務(wù)員會(huì )詢(xún)問(wèn)是否辦理一張會(huì )員卡來(lái)積分以便日后折扣等福利活動(dòng)。會(huì )員卡會(huì )記錄顧客的姓名、積分、消費記錄等信息,如果顧客要參與超市的福利活動(dòng)等都需要提供會(huì )員卡,服務(wù)員在后臺刷卡查詢(xún)即可知道是哪個(gè)用戶(hù)在使用會(huì )員卡。
現在將現實(shí)生活中的案例中的角色互換一下。
當用戶(hù)沒(méi)有在Web服務(wù)器登記過(guò)用戶(hù)信息,而使用網(wǎng)站提供的需登錄的服務(wù)時(shí),服務(wù)器會(huì )告知瀏覽器跳轉到登陸頁(yè)面進(jìn)行用戶(hù)信息的登記操作,登錄完成之后,瀏覽器向服務(wù)器發(fā)起一次登陸請求,服務(wù)器將用戶(hù)的信息存儲到Cookie中,并響應給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲到緩存區。
當用戶(hù)在Web服務(wù)器登記過(guò)用戶(hù)信息,而使用網(wǎng)站提供的需登錄的服務(wù)時(shí),服務(wù)器會(huì )通過(guò)請求中攜帶的Cookie判斷此次請求時(shí)哪個(gè)用戶(hù),并以這個(gè)Cookie的信息去查詢(xún)數據庫等操作,完成用戶(hù)需要的服務(wù)。
HTTP是無(wú)狀態(tài)協(xié)議,意味著(zhù)服務(wù)器不會(huì )在兩個(gè)請求之間保留任何數據(狀態(tài))。由于Web服務(wù)器要面對很多用戶(hù)的并發(fā)訪(fǎng)問(wèn),為了提高Web服務(wù)器對并發(fā)訪(fǎng)問(wèn)的處理能力,在設計HTTP協(xié)議時(shí)規定Web服務(wù)器發(fā)送HTTP應答報文和文檔時(shí),不保存發(fā)出請求的Web瀏覽器進(jìn)程的任何狀態(tài)信息,從而減輕服務(wù)器端的負載,同時(shí)無(wú)狀態(tài)也減小了HTTP請求的開(kāi)銷(xiāo)。
但是在必要的場(chǎng)景,如登陸、購物等都需要保存用戶(hù)的狀態(tài)(信息),就不得不用到Cookie。
第一次訪(fǎng)問(wèn)服務(wù)器,沒(méi)有Cookie,向服務(wù)器登記新的Cookie。
第二次及以后訪(fǎng)問(wèn)服務(wù)器,有Cookie,無(wú)需登記新的Cookie。
需求分析:
當用戶(hù)訪(fǎng)問(wèn)homepage.jsp時(shí),判斷請求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉到登錄頁(yè)面進(jìn)行用戶(hù)信息的登記。當用戶(hù)再次訪(fǎng)問(wèn)homepae.jsp時(shí),不會(huì )被攔截,可以讓用戶(hù)訪(fǎng)問(wèn)個(gè)人主頁(yè)頁(yè)面。
編寫(xiě)代碼:
個(gè)人主頁(yè)的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")) { // 如果用戶(hù)是第一次訪(fǎng)問(wèn)個(gè)人主頁(yè),就通知瀏覽器跳轉到登陸頁(yè)面進(jìn)行登錄 resp.sendRedirect(req.getContextPath() + "/login.jsp"); } } } }
用戶(hù)登錄的Servlet
@WebServlet(name = "loginServlet", urlPatterns = "/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取http請求參數username String username = request.getParameter("username"); // 設置響應內容的類(lèi)型 response.setContentType("text/html;charset=utf-8"); // 獲取Cookie值 Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if (!cookie.getName().equals("username")) { // 用戶(hù)第一次訪(fǎng)問(wèn) Cookie userCookie = new Cookie("username", username); userCookie.setMaxAge(300); response.addCookie(userCookie); } response.sendRedirect(request.getContextPath() + "/homepage.jsp"); } } }
打開(kāi)瀏覽器,實(shí)驗一下:
在第一次訪(fǎng)問(wèn)homepage頁(yè)面時(shí),看到瀏覽器緩存區并沒(méi)有名為username的Cookie,只有當登錄之后,瀏覽器緩存區才有了這個(gè)Cookie。
以上就是Cookie在Java中的使用的詳細內容,更多關(guān)于Cookie的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站