如何使用Cookie?

目录

摘要

一、Cookie是什么?

二、Cookie的常用方法

三、代码案例

四、运行结果

摘要

    http协议是一个无状态的协议,你每一个跳转到下一个页面的时候都是需要先登录才能使用,这样就很麻烦比如淘宝,没有cookie和session的话,用户在首页已经登录上去了,但是需要再次登录才能选择商品,需要再次登录才能放到购物车,需要再次登录才能然后购买,这样用户的体验是相当差的。

一、Cookie是什么?

(1)cookie是再浏览器中保存的。

(2)如果想要使用cookie要保证我们的浏览器是否开启cookie,之所以说有一定的弊端,如果浏览器没有开启cookie,就不能在使用cookie了。

(3)cookie的大小是有限制的,通常是4096byte。

(4)cookie的保存是以键值对的形式存在的。

二、Cookie的常用方法

//1.cookie的构造方法,目的是实例化出来cookie对象
Cookie(String name,String value)
//2.设置cookie的方法
setValue(String value) //修改cookie的值
setMaxAge(int time) //设置cookie的有效时间
setPath(String path) //设置当前cookie的有效路径
//3.要将cookie发送到浏览器
response.addCookie(Cookie cookie);
//4.获取浏览器中cookie,返回值是一个数组
   Cookie[] cookies = request.getCookies();

三、代码案例

  • 第一个servlet将数据“sb” 存到cookie 里,起个名字交msg,并设置这条cookie的生效时间 ;第二个servlet分别将key 值 和value值取出来,第三个servlet清空这条cookie

(1)第一个servlet


package com.by.servlet2;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//     1. 获取Cookie,并将sb存到cookie里
        Cookie cookie = new Cookie("msg", "sb");
        /**
         * 2.设置有效时间
         *    正数:表示当前cookie的有效时间
         *    负数:表示当前浏览器打开的时候存在,关闭的时候没了
         *     0:销毁当前的cookie
         */
        cookie.setMaxAge(6000);
//        3. 把Cookie发送到浏览器
        resp.addCookie(cookie);
    }
}

 (2)第二个servlet

/*
 * Copyright (c) 2020, 2023, webrx.cn All rights reserved.
 *
 */
package com.by.servlet2;


import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class GetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1. 获取所有Cookie,返回一个数组
        Cookie[] cookiesArr = req.getCookies();
//        2. 遍历所有Cookie
        for (Cookie cookie : cookiesArr) {
            System.out.println("=====================");
//            3. 获取键
            String name = cookie.getName();
            System.out.println(name);
//            4. 获取值
            String value = cookie.getValue();
            System.out.println(value);
        }
    }
}

(3)第三个servlet

/*
 * Copyright (c) 2020, 2023, webrx.cn All rights reserved.
 *
 */
package com.by.servlet2;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class DestroyCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 清空指定的cookie :本质是将cookie的生效时间变成0
         */
        //1. 获取所有Cookie
        Cookie[] cookies = req.getCookies();
//        2. 遍历cookie数组
        for (Cookie cookie : cookies) {
//            3. 找到要删除的cookie,根据key值找指定cookie
            if(cookie.getName().equals("msg")){
//                4. 将这个查找出来的cookie的生效时间设置为0
                cookie.setMaxAge(0);
//                5. 将修改后的cookie重新发送给浏览器
                resp.addCookie(cookie);
            }
        }
    }
}

(4) web.xml 配置

<!--Cookie-->
    <servlet>
        <servlet-name>setCookieServlet</servlet-name>
        <servlet-class>com.by.servlet2.SetCookieServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>setCookieServlet</servlet-name>
        <url-pattern>/setCookieServlet</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>GetCookieServlet</servlet-name>
        <servlet-class>com.by.servlet2.GetCookieServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetCookieServlet</servlet-name>
        <url-pattern>/GetCookieServlet</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>DestroyCookieServlet</servlet-name>
        <servlet-class>com.by.servlet2.DestroyCookieServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DestroyCookieServlet</servlet-name>
        <url-pattern>/DestroyCookieServlet</url-pattern>
    </servlet-mapping>

四、运行结果

首先运行第一个servlet 将数据存到cookie里,接着运行第二个servlet 获取key 和 value 

然后运行第三个servlet ,清空cookie后 再重新运行第二个servlet

 

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天的接口写完了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值