cookie

  • a)什么是cookie?
  • b)如何创建cookie?
  • c)服务器如何获取cookie
  • d)cookie值的修改
  • e)浏览器如何查看cookie
  • 谷歌浏览器如何查看cookie
  • 火狐浏览器如何查看cookie
  • f)cookie生命控制
  • g)cookie有效路径path的路径
  • h)cookie练习 --免输入用户名登录


a)什么是cookie?

1.cookie翻译过来是饼干的意思
2.cookie是服务器通知客户端保存键值对的一种技术
3.客户端有了cookie后,每次请求都发送给服务器
4.每个cookie的大小不能超过4kb

b)如何创建cookie?

cookie的创建

java cookie获取 cookie javaweb_cookie


cookieServlet.java

package com.atguigu.servlet;

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 javax.swing.text.html.HTML;
import java.io.IOException;

public class cookieServlet extends HttpServlet {


    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我被调用了");
        //相应中文乱码问题
        resp.setContentType("text/html;charset=UTF-8");
        //1.创建cookie对象
        Cookie cookie = new Cookie("key1","value1");
    //2.通知客户端保持cookie
    resp.addCookie(cookie);
    resp.getWriter().write("Cookie创建成功");
    }
}

c)服务器如何获取cookie

java cookie获取 cookie javaweb_html_02


服务器获取客户端的cookie只需要一行代码req.getCookie();Cookie[]

cookie获取工具类的编写 用于获取指定的cookie值
CookieUntils.java

package com.atguigu.util;

import javax.servlet.http.Cookie;

public class CookieUtils {
    /***
     * 查找指定名称的cookie对象
     * @param name
     * @param cookies
     * @return
     */
    public static Cookie findCookie(String name,Cookie[] cookies){
        if (name == null || cookies  == null ||cookies.length == 0){
            return null;
        }
        for (Cookie cookie : cookies) {
            if(name.equals(cookie.getName())){
                return cookie;
            }
        }
        return null;
           }
}

cookieServlet.java

package com.atguigu.servlet;

import com.atguigu.util.CookieUtils;

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 javax.swing.text.html.HTML;
import java.io.IOException;

public class cookieServlet extends HttpServlet {


    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("我被调用了");
//        //相应中文乱码问题
//        resp.setContentType("text/html;charset=UTF-8");
//        //1.创建cookie对象
//        Cookie cookie = new Cookie("key1","value1");
//    //2.通知客户端保持cookie
//    resp.addCookie(cookie);
//    resp.getWriter().write("Cookie创建成功");
//    }
        Cookie[] cookies = req.getCookies();
        Cookie IwannaCookie;
        for (Cookie cookie : cookies) {
           //getName方法返回的cookie的key(名)
            //getvalue方法返回cookied的value值
            resp.setContentType("text/html;charset=UTF-8");
            Cookie key1 = CookieUtils.findCookie("key1", cookies);
            if("key2".equals(cookie.getName())){
                IwannaCookie = cookie;
                break;
            }
            //如果不等于null,说明赋过值,说明找到了需要的cooki
            if(cookie != null){
                resp.getWriter().write("找到了对应的cookie:Cookie[" + cookie.getName() +"="+cookie.getValue()+ "]");
            }

        }
    }
}

d)cookie值的修改

方案一:
1.先创建一个要修改的cookie对象
2.在构造器,同时赋予新的cookie值
3.调用response.addCookie(Cookie);

//        方案一:
//        1.先创建一个要修改的cookie对象
//        2.在构造器,同时赋予新的cookie值
        Cookie cookie = new Cookie("key1","newvalue1");
//        3.调用response.addCookie(Cookie);//通知客户端保存修改
        resp.addCookie(cookie);
        resp.getWriter().write("key1的cookie已经修改好");



    }

方案二:
1.先查找到需要修改的cookie对象
2.第哦啊用getvalue()方法赋予新的cookie值
3.调用response.addCookie()通知客户端保存修改

//        方案二:
//        1.先查找到需要修改的cookie对象
        Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
//        2.调用getvalue()方法赋予新的cookie值
        if(cookie != null){
            cookie.setValue("newValue2");
        }
//        3.调用response.addCookie()通知客户端保存修改
         resp.addCookie(cookie);
        resp.getWriter().write("已经找到了cookie");
    }
    }

e)浏览器如何查看cookie

谷歌浏览器如何查看cookie

java cookie获取 cookie javaweb_客户端_03

火狐浏览器如何查看cookie

java cookie获取 cookie javaweb_java cookie获取_04

f)cookie生命控制

cookie的生命控制指的是如何管理cookie什么时候被销毁(删除)
setMaxAge()
正值,表示在指定的秒数后过期
负值,表示浏览器一关,cookie就会被删除(默认-1)
零,表示马上删除cookie

// cookie存活3000s
        Cookie cookie = new Cookie("defaultlife","defaultllife");
        cookie.setMaxAge(3000);
        resp.addCookie(cookie);

        //cookie浏览器关闭后删除

        Cookie cookie = new Cookie("defaultlife","defaultllife");
        cookie.setMaxAge(-1);
        resp.addCookie(cookie);

        //cookie立即删除
        Cookie cookie = new Cookie("defaultlife","defaultllife");
        cookie.setMaxAge(0);
        resp.addCookie(cookie);

g)cookie有效路径path的路径

cookie的path属性可以决定哪些cookie可以发送给服务器,哪些不发
path属性是通过请求的地址来进行有效的过滤

cookieA : path=/工程路径
cookieB: path=/工程路径/abc

请求地址如下
http://ip:port/工程路径/a.html cookieA 发送
cookieB 不发送

http://ip:port/工程路径/abc/a.html cookieA发送
cookieB 也发送

Cookie cookie = new Cookie("path1","path1");
//getContextPath()获得工程路径
cookie.setPath(req.getContextPath()+"/abc"); //得到工程路径后的内容 /工程路径/abc
resp.getWriter().write("创建了一个带有工程路径的cookie");

h)cookie练习 --免输入用户名登录

java cookie获取 cookie javaweb_java_05


login.jsp

使用el表达式获取cookie的值

<%--
  Created by IntelliJ IDEA.
  User: 26523
  Date: 2021/9/23
  Time: 11:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/loginServlet" >
用户名:<input type="text" name="username" value = "${cookie.username.value}"/><br/>
密码: <input type="password" name="password" id=""/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

cookieServlet.java

package com.atguigu.servlet;

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 loginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        if("zhaochen".equals(username) && "123456".equals(password)){
            //登录成功
            Cookie cookie = new Cookie("username",username);
            cookie.setMaxAge(60 * 60 * 24 * 7);//当前cookie一星期内有效
            resp.addCookie(cookie);
            System.out.println("登陆成功");
        }else{
            //登陆失败
            System.out.println("登陆失败");
        }
    }
}