J2EE--Cookie

  1. 為什么要使用Cookie?
  2. 怎樣使用Cookie?
  3. Cookie使用缺陷
  4. Cookie使用示例

1. 為什么要使用Cookie?

HTTP 是一個無狀態(tài)的協(xié)議,這意味著每一次的請求都是獨(dú)立的,服務(wù)器和客戶端之間沒有辦法知道上一次請求和下一次請求的關(guān)系,所以產(chǎn)生了Cookie。Cookie將數(shù)據(jù)保存到了客戶端,方便下一次請求使用。

image.png

作用

  1. cookie一般用于存出少量的不太敏感的數(shù)據(jù)
  2. 在不登錄的情況下,完成服務(wù)器對客戶端的身份識別

2. 怎樣使用Cookie?

2.1 創(chuàng)建Cookie對象,綁定數(shù)據(jù)

Cookie c = new Cookie(String name,String value);

注意:一個Cookie只能存儲一個字符串類型的數(shù)據(jù),不能存儲其他類型的數(shù)據(jù)

2.2 發(fā)送Cookie對象

response.addCookie(Cookie cookie);

2.3 獲取Cookie,拿到數(shù)據(jù)

Cookie[]  request.getCookies()

獲取Cookie時為一個數(shù)組,通過數(shù)組的方式進(jìn)行遍歷

2.4 設(shè)置Cookie存活時間

setMaxAge(int seconds)

2.5 使用Cookie完整案例

@WebServlet("/cookie1")
public class CookieDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("msg","hello");
        
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);

    }
}
@WebServlet("/cookie2")
public class CookieDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie [] cookies =  req.getCookies();

        for (Cookie c:cookies) {
            if ("msg".equals(c.getName())){
                System.out.println(c.getValue());
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
image.png
image.png

效果展示

image.png

3. Cookie使用缺陷

4. Cookie使用示例

@WebServlet("/cookie3")
public class CookieDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //設(shè)置響應(yīng)的消息體的數(shù)據(jù)格式以及編碼
        response.setContentType("text/html;charset=utf-8");

        //1.獲取所有Cookie
        Cookie[] cookies = request.getCookies();
        boolean flag = false;//沒有cookie為lastTime
        //2.遍歷cookie數(shù)組
        if(cookies != null && cookies.length > 0){
            for (Cookie cookie : cookies) {
                //3.獲取cookie的名稱
                String name = cookie.getName();           
                //4.判斷名稱是否是:lastTime
                if("lastTime".equals(name)){
                    //有該Cookie,不是第一次訪問
                    flag = true;//有l(wèi)astTime的cookie
                    //設(shè)置Cookie的value
                    //獲取當(dāng)前時間的字符串,重新設(shè)置Cookie的值,重新發(fā)送cookie
                    Date date  = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String str_date = sdf.format(date);
                    System.out.println("編碼前:"+str_date);
                    //URL編碼
                    str_date = URLEncoder.encode(str_date,"utf-8");
                    System.out.println("編碼后:"+str_date);
                    cookie.setValue(str_date);
                    //設(shè)置cookie的存活時間
                    cookie.setMaxAge(60 * 60 * 24 * 30);//一個月
                    response.addCookie(cookie);


                    //響應(yīng)數(shù)據(jù)
                    //獲取Cookie的value,時間
                    String value = cookie.getValue();
                    System.out.println("解碼前:"+value);
                    //URL解碼:
                    value = URLDecoder.decode(value,"utf-8");
                    System.out.println("解碼后:"+value);
                    response.getWriter().write("<h1>歡迎回來,您上次訪問時間為:"+value+"</h1>");

                    break;

                }
            }
        }

        //第一次訪問
        if(cookies == null || cookies.length == 0 || flag == false){
            //設(shè)置Cookie的value
            //獲取當(dāng)前時間的字符串,重新設(shè)置Cookie的值,重新發(fā)送cookie
            Date date  = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String str_date = sdf.format(date);
            System.out.println("編碼前:"+str_date);
            //URL編碼
            str_date = URLEncoder.encode(str_date,"utf-8");
            System.out.println("編碼后:"+str_date);

            Cookie cookie = new Cookie("lastTime",str_date);
            //設(shè)置cookie的存活時間
            cookie.setMaxAge(60 * 60 * 24 * 30);//一個月
            response.addCookie(cookie);

            response.getWriter().write("<h1>您好,歡迎您首次訪問</h1>");
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容