欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Cookie在Java中的使用

 更新時(shí)間:2021年05月20日 09:19:13   作者:kongsam  
Cookie又稱“小甜餅”,類型為“小型文本文件”,指某些網(wǎng)站為了辨別用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)。由用戶客戶端計(jì)算機(jī)暫時(shí)或永久保存的信息。本文將講解Cookie在Java中的使用,感興趣的朋友可以了解下

什么是Cookie

在現(xiàn)實(shí)生活中,當(dāng)顧客第一次在超市購物,通常服務(wù)員會(huì)詢問是否辦理一張會(huì)員卡來積分以便日后折扣等福利活動(dòng)。會(huì)員卡會(huì)記錄顧客的姓名、積分、消費(fèi)記錄等信息,如果顧客要參與超市的福利活動(dòng)等都需要提供會(huì)員卡,服務(wù)員在后臺(tái)刷卡查詢即可知道是哪個(gè)用戶在使用會(huì)員卡。

現(xiàn)在將現(xiàn)實(shí)生活中的案例中的角色互換一下。

當(dāng)用戶沒有在Web服務(wù)器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務(wù)時(shí),服務(wù)器會(huì)告知瀏覽器跳轉(zhuǎn)到登陸頁面進(jìn)行用戶信息的登記操作,登錄完成之后,瀏覽器向服務(wù)器發(fā)起一次登陸請(qǐng)求,服務(wù)器將用戶的信息存儲(chǔ)到Cookie中,并響應(yīng)給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲(chǔ)到緩存區(qū)。

當(dāng)用戶在Web服務(wù)器登記過用戶信息,而使用網(wǎng)站提供的需登錄的服務(wù)時(shí),服務(wù)器會(huì)通過請(qǐng)求中攜帶的Cookie判斷此次請(qǐng)求時(shí)哪個(gè)用戶,并以這個(gè)Cookie的信息去查詢數(shù)據(jù)庫等操作,完成用戶需要的服務(wù)。

Cookie的必要

HTTP是無狀態(tài)協(xié)議,意味著服務(wù)器不會(huì)在兩個(gè)請(qǐng)求之間保留任何數(shù)據(jù)(狀態(tài))。由于Web服務(wù)器要面對(duì)很多用戶的并發(fā)訪問,為了提高Web服務(wù)器對(duì)并發(fā)訪問的處理能力,在設(shè)計(jì)HTTP協(xié)議時(shí)規(guī)定Web服務(wù)器發(fā)送HTTP應(yīng)答報(bào)文和文檔時(shí),不保存發(fā)出請(qǐng)求的Web瀏覽器進(jìn)程的任何狀態(tài)信息,從而減輕服務(wù)器端的負(fù)載,同時(shí)無狀態(tài)也減小了HTTP請(qǐng)求的開銷。

但是在必要的場景,如登陸、購物等都需要保存用戶的狀態(tài)(信息),就不得不用到Cookie。

Cookie如何工作

第一次訪問服務(wù)器,沒有Cookie,向服務(wù)器登記新的Cookie。

第二次及以后訪問服務(wù)器,有Cookie,無需登記新的Cookie。

模擬用戶登錄

需求分析:

當(dāng)用戶訪問homepage.jsp時(shí),判斷請(qǐng)求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉(zhuǎn)到登錄頁面進(jìn)行用戶信息的登記。當(dāng)用戶再次訪問homepae.jsp時(shí),不會(huì)被攔截,可以讓用戶訪問個(gè)人主頁頁面。

編寫代碼:

個(gè)人主頁的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")) {
                // 如果用戶是第一次訪問個(gè)人主頁,就通知瀏覽器跳轉(zhuǎn)到登陸頁面進(jì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請(qǐng)求參數(shù)username
        String 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");
        }
    }

}

打開瀏覽器,實(shí)驗(yàn)一下:

在第一次訪問homepage頁面時(shí),看到瀏覽器緩存區(qū)并沒有名為username的Cookie,只有當(dāng)?shù)卿浿?,瀏覽器緩存區(qū)才有了這個(gè)Cookie。

以上就是Cookie在Java中的使用的詳細(xì)內(nèi)容,更多關(guān)于Cookie的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺聊java8中數(shù)值流的使用

    淺聊java8中數(shù)值流的使用

    java8為我提供的簡單快捷的數(shù)值流計(jì)算API,本文就基于幾個(gè)常見的場景介紹一下數(shù)值流API的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-10-10
  • SpringBoot?配置文件給實(shí)體注入值方式

    SpringBoot?配置文件給實(shí)體注入值方式

    這篇文章主要介紹了SpringBoot?配置文件給實(shí)體注入值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot整合Vue實(shí)現(xiàn)微信掃碼支付以及微信退款功能詳解

    SpringBoot整合Vue實(shí)現(xiàn)微信掃碼支付以及微信退款功能詳解

    最近公司要在微信公眾號(hào)上做一個(gè)活動(dòng)預(yù)報(bào)名,活動(dòng)的門票等需要在微信中支付,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Vue實(shí)現(xiàn)微信掃碼支付以及微信退款功能的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • SpringBoot用JdbcTemplates訪問Mysql實(shí)例代碼

    SpringBoot用JdbcTemplates訪問Mysql實(shí)例代碼

    本篇文章主要介紹了SpringBoot用JdbcTemplates訪問Mysql實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)

    SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)

    Spring Boot@EnableAutoConfiguration是一個(gè)強(qiáng)大的工具,可以簡化配置過程,從而實(shí)現(xiàn)快速開發(fā),本文主要介紹了SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • Spring boot如何通過@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)及多線程配置

    Spring boot如何通過@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)及多線程配置

    這篇文章主要介紹了Spring boot如何通過@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)及多線程配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringSecurity集成第三方登錄過程詳解(最新推薦)

    SpringSecurity集成第三方登錄過程詳解(最新推薦)

    在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對(duì)應(yīng)的Authentication實(shí)現(xiàn)來實(shí)現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧
    2024-05-05
  • 關(guān)于SpringSecurity配置403權(quán)限訪問頁面的完整代碼

    關(guān)于SpringSecurity配置403權(quán)限訪問頁面的完整代碼

    本文給大家分享SpringSecurity配置403權(quán)限訪問頁面的完整代碼,配置之前和配置之后的詳細(xì)介紹,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

    java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

    裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝
    2016-10-10
  • Java實(shí)現(xiàn)窗體程序顯示日歷表

    Java實(shí)現(xiàn)窗體程序顯示日歷表

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)窗體程序顯示日歷表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論