JavaWeb--快速入门Cookie&Session

    • 实例
  • JSP页面

  • SessionServlet代码

  • 2.3 Session域数据的存取

  • 2.4 Session 生命周期控制

    • 默认超时时长
  • 设置web工程某个session超时时间

  • Session马上超时

  • 2.5 浏览器和 Session之间关联的技术内幕

前言

=================================================================

专升本的上学期,java学的断断续续,最后

一、Cookie

=======================================================================

1.1 什么是Cookie?


1.Cookie翻译过来是饼干的意思

2.Cookie是服务器通知客户端保存键值对的一种技术

3.客户端有了Cookie后,每次请求都发送给服务器

4.每次Cookie的大小不超过为4kb

1.2 如何创建Cookie?


image-20220101111051381

image-20220102174218519

html代码

  • Cookie的创建
  • cookieServlet代码

    protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //1.创建Cookie对象

    Cookie cookie = new Cookie(“key1”, “value1”);

    //2.通知客户端保存Cookie

    resp.addCookie(cookie);

    resp.getWriter().write(“Cookie创建成功”);

    }

    image-20220102173903186

    1.3 如何获取Cookie?


    image-20220102182427938

    image-20220102182411380

    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    Cookie[] cookies = req.getCookies();

    for (Cookie cookie : cookies) {

    // getName方法返回Cookie的key(名)

    // getValue方法返回Cookie的value值

    resp.getWriter().write(“Cookie[” + cookie.getName() + “=” + cookie.getValue() + “]
    ”);

    }

    Cookie iWantCookie = CookieUtils.findCookie(“key1”, cookies);

    // for (Cookie cookie : cookies) {

    // if (“key2”.equals(cookie.getName())) {

    // iWantCookie = cookie;

    // break;

    // }

    // }

    // 如果不等于null,说明赋过值,也就是找到了需要的Cookie

    if (iWantCookie != null) {

    resp.getWriter().write(“找到了需要的Cookie”);

    }

    }

    工具类

    package com.caq.study.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;

    }

    }

    1.4 Cookie值的修改


    方案一:

    1、先创建一个要修改的同名(指的就是key)的Cookie对象

    2、在构造器,同时赋于新的Cookie值。

    3、调用response.addCookie( Cookie );

    方案二:

    1、先查找到需要修改的Cookie对象

    2、调用setvalue()方法赋于新的Cookie值。

    3、调用response.addCookie()通知客户端保存修改

    protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // 方案一:

    // 1、先创建一个要修改的同名的Cookie对象

    // 2、在构造器,同时赋于新的Cookie值。

    // Cookie cookie = new Cookie(“key1”,“newValue1”);

    // 3、调用response.addCookie( Cookie ); 通知 客户端 保存修改

    // resp.addCookie(cookie);

    // 方案二:

    // 1、先查找到需要修改的Cookie对象

    Cookie cookie = CookieUtils.findCookie(“key2”, req.getCookies());

    if (cookie != null) {

    // 2、调用setValue()方法赋于新的Cookie值。

    cookie.setValue(“newValue2”);

    // 3、调用response.addCookie()通知客户端保存修改

    resp.addCookie(cookie);

    }

    resp.getWriter().write(“key1的Cookie已经修改好”);

    }

    服务端修改Cookie

    image-20220102183948067

    1.5 Cookie生命控制


    Cookie 的生命控制指的是如何管理Cookie什么时候被销毁(删除)

    setMaxAge()

    正数,表示在指定的秒数后过期

    负数,表示浏览器一关,Cookie就会被删除(默认值是-1)

    零,表示马上删除Cookie

    三个实例都写进去了

    package com.caq.study.servlet;

    import com.caq.study.util.CookieUtils;

    import javax.servlet.ServletException;

    import javax.servlet.http.Cookie;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    public class CookieServlet extends BaseServlet {

    protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    Cookie cookie = new Cookie(“path1”, “path1”);

    // getContextPath() ===>>>> 得到工程路径

    cookie.setPath( req.getContextPath() + “/abc” ); // ===>>>> /工程路径/abc

    resp.addCookie(cookie);

    resp.getWriter().write(“创建了一个带有Path路径的Cookie”);

    }

    protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // 方案一:

    // 1、先创建一个要修改的同名的Cookie对象

    // 2、在构造器,同时赋于新的Cookie值。

    // Cookie cookie = new Cookie(“key1”,“newValue1”);

    // 3、调用response.addCookie( Cookie ); 通知 客户端 保存修改

    // resp.addCookie(cookie);

    // 方案二:

    // 1、先查找到需要修改的Cookie对象

    Cookie cookie = CookieUtils.findCookie(“key2”, req.getCookies());

    if (cookie != null) {

    // 2、调用setValue()方法赋于新的Cookie值。

    cookie.setValue(“newValue2”);

    // 3、调用response.addCookie()通知客户端保存修改

    resp.addCookie(cookie);

    }

    resp.getWriter().write(“key1的Cookie已经修改好”);

    }

    /**

    • 设置存活1个小时的Cooie

    • @param req

    • @param resp

    • @throws ServletException

    • @throws IOException

    */

    protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    Cookie cookie = new Cookie(“life3600”, “life3600”);

    cookie.setMaxAge(60 * 60); // 设置Cookie一小时之后被删除。无效

    resp.addCookie(cookie);

    resp.getWriter().write(“已经创建了一个存活一小时的Cookie”);

    }

    /**

    • 马上删除一个Cookie

    • @param req

    • @param resp

    • @throws ServletException

    • @throws IOException

    */

    protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // 先找到你要删除的Cookie对象

    Cookie cookie = CookieUtils.findCookie(“key1”, req.getCookies());

    if (cookie != null) {

    // 调用setMaxAge(0);

    cookie.setMaxAge(0); // 表示马上删除,都不需要等待浏览器关闭

    // 调用response.addCookie(cookie);

    resp.addCookie(cookie);

    resp.getWriter().write(“key1的Cookie已经被删除”);

    }

    }

    /**

    • 默认的会话级别的Cookie

    • @param req

    • @param resp

    • @throws ServletException

    • @throws IOException

    */

    protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    Cookie cookie = new Cookie(“defalutLife”,“defaultLife”);

    cookie.setMaxAge(-1);//设置存活时间

    resp.addCookie(cookie);

    }

    protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    Cookie[] cookies = req.getCookies();

    for (Cookie cookie : cookies) {

    // getName方法返回Cookie的key(名)

    // getValue方法返回Cookie的value值

    resp.getWriter().write(“Cookie[” + cookie.getName() + “=” + cookie.getValue() + “]
    ”);

    }

    Cookie iWantCookie = CookieUtils.findCookie(“key1”, cookies);

    // 如果不等于null,说明赋过值,也就是找到了需要的Cookie

    if (iWantCookie != null) {

    resp.getWriter().write(“找到了需要的Cookie”);

    }

    }

    protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //1 创建Cookie对象

    Cookie cookie = new Cookie(“key1”, “value1”);

    Cookie cookie2 = new Cookie(“key2”, “value2”);

    //2 通知客户端保存Cookie

    resp.addCookie(cookie);

    resp.addCookie(cookie2);

    resp.getWriter().write(“Cookie创建成功”);

    }

    }

    默认情况

    image-20220102184309148

    关闭打开后,再次查看,发现Cookie就会被删除,前面创建的那几个会消失也是因为它们是通过默认的方式创建的

    image-20220102184349892

    马上删除一个Cookie

    创建两个cookie

    image-20220102185535659

    立马删除

    找到要删除的key1

    Cookie cookie = CookieUtils.findCookie(“key1”, req.getCookies());

    image-20220102185632741

    设置存活1个小时的Cooie

    image-20220102185802006

    退出再次查看,发现还是在的

    image-20220102185823445

    1.6 Cookie有效路径Path的设置


    Cookie 的 path 属性可以有效的过滤哪些Cookie可以发送给服务器。哪些不发。

    path 属性是通过请求的地址来进行有效的过滤。

    CookieA path=/工程路径

    CookieB path=/工程路径/abc

    image-20220102190123961

    CookieA满足设置的路径

    CookieB不发送因为它不满足请求地址的路径

    默认的Cookie路径就是工程路径

    image-20220102190540333

    请求地址没有匹配Cookie路径情况下,客户端是接受不到Cookie的

    image-20220102190608116

    匹配后才能接受到

    我们前面做的接受了一个存活1小时的Cookie也会保留下来,因为它的Cookie也满足这个请求地址

    image-20220102190826656

    1.7 免用户名登录练习


    image-20220102193845519

    package com.caq.study.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”);

    if (“pyy”.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(“登录 失败”);

    }

    }

    }

    JSP页面

    <%–

    Created by IntelliJ IDEA.

    User: Administrator

    Date: 2020/2/10

    Time: 11:34

    To change this template use File | Settings | File Templates.

    –%>

    <%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

    学习分享,共勉

    这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

    资料整理不易,读者朋友可以转发分享下!

    Java核心知识体系笔记.pdf

    记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

    中高级Java开发面试高频考点题笔记300道.pdf

    记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

    架构进阶面试专题及架构学习笔记脑图

    记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

    Java架构进阶学习视频分享

    resp.addCookie(cookie);

    System.out.println(“登录 成功”);

    } else {

    // 登录 失败

    System.out.println(“登录 失败”);

    }

    }

    }

    JSP页面

    <%–

    Created by IntelliJ IDEA.

    User: Administrator

    Date: 2020/2/10

    Time: 11:34

    To change this template use File | Settings | File Templates.

    –%>

    <%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

    学习分享,共勉

    这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

    资料整理不易,读者朋友可以转发分享下!

    Java核心知识体系笔记.pdf

    [外链图片转存中…(img-Hm8RzwyS-1714327174222)]

    中高级Java开发面试高频考点题笔记300道.pdf

    [外链图片转存中…(img-MV3Ht9pi-1714327174223)]

    架构进阶面试专题及架构学习笔记脑图

    [外链图片转存中…(img-9RTPc3rV-1714327174223)]

    Java架构进阶学习视频分享

    本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值