JavaWeb笔记_Cookie

一.会话技术概述

在日常生活中,A和B之间在打电话过程中一连串的你问我答就是一个会话
   在BS模型中,会话可以理解为通过浏览器访问服务端的资源,点击超链接可以进行资源的跳转,直到浏览器关闭过程叫做会话
   我们使用会话技术可以解决的是整个会话过程中(通过浏览器浏览服务端资源过程中)会产生数据保存问题

   Request域,ServletContext域在保存会话过程中的数据会导致数据访问的一些问题.(每发送一个请求和响应,就会新建一个request和response对象,很难访问)

二.Cookie

2.1 Cookie概述

 Cookie是一种在客户端(浏览器)存储用户会话信息的技术

2.2 Cookie创建和获取

/*** 服务端创建Cookie并发送给浏览器*    HttpServletResponse方法:*      public void addCookie(Cookie cookie)*          将指定 cookie 添加到响应。可多次调用此方法设置一个以上的 cookie。*    Cookie类的方法:*       构造方法:*         public Cookie(String name, String value)*                  构造带指定名称和值的 cookie。*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.addCookie(new Cookie("username","zs"));response.addCookie(new Cookie("username","ls"));//新值覆盖老值response.addCookie(new Cookie("password","123"));}
/*** 获取Cookie中的数据*  HttpServletRequest中的方法:*     public Cookie[] getCookies()*        获取浏览器发送过来的所有Cookie对象,如果没有发送任何 cookie,则此方法返回 null*  Cookie中的方法:*     String getName()*           获取当前Cookie对象中封装的name*     String getValue()*           获取当前Cookie对象中封装的value*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求中会携带着Cookie的数据,所以getCookies()方法在request对象中Cookie[] cookies = request.getCookies();if (cookies!=null) {for (Cookie cookie : cookies) {System.out.println(cookie.getName() + "=" + cookie.getValue());}}else {throw new NullPointerException();}}

2.3 Cookie原理

2.4 Cookie路径

 1.Cookie默认设置路径
             Cookie会将路径默认设置为请求的服务端路径最后一级路径前面的所有路径
             例如:
             请求 /day12_CookieAndSession/sendCookie,Cookie的默认路径就是                         /day12_CookieAndSession
             请求 /day12_CookieAndSession/path01/setCookie,Cookie的默认路径是                         /day12_CookieAndSession/path01
  2.Cookie不同路径是否携带问题
            Cookie的路径:/day12_CookieAndSession/path01
             /day12_CookieAndSession/path01/getCookie01   会携带
           /day12_CookieAndSession/path01/path02/getCookie02  会携带
            /day12_CookieAndSession/getCookie03       不携带
   Cookie会在请求跟Cookie相同的路径的Servlet或者该路径下的子级路径的Servlet都会携带             Cookie
   如果这个路径既不是Cookie的路径也不是子级路径,那么就不携带这个Cookie
  3.设置Cookie的路径
    /**
     * 手动设置Cookie路径
     *  public String getPath()
     *      手动设置Cookie的路径
     */

/*** 手动设置Cookie路径*  public String getPath()*      手动设置Cookie的路径*/
@WebServlet("/path01/setCookie")
public class SetCookie extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie("gender", "male");cookie.setPath(request.getContextPath());//同一级的Servlet以及子级的Servlet在发出请求时都会携带cookieresponse.addCookie(cookie);}
}
/*** 处理Cookie对象的工具类*/
public class CookieUtils {/**** @param name 要查找的Cookie的name* @param cookies 存储了浏览器携带的所有cookie对象* @return 若找到与name匹配的cookie对象则返回,反之则返回null*/public static Cookie getCookie(String name, Cookie[] cookies) {if (cookies != null) {for (Cookie cookie : cookies) {if (cookie.getName().equals(name)) {return cookie;}}}return null; //在cookie数组中没找到所需要的cookie对象或者cookies为null,返回null}
}

2.5 Cookie生命周期

2.5.1 概述

  1.Cookie的默认最大存活时间在浏览器会话结束前,一旦浏览器会话结束(浏览器关闭),浏览器会自      动删除Cookie

  2.手动设置Cookie最大存活时间
     public void setMaxAge(int expiry)
     设置 cookie 的最大生存时间,以秒为单位。

2.5.2 设置cookie生命周期
@WebServlet("/setCookieMaxAge")
public class SetCookieMaxAge extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie("id", "789");cookie.setPath(request.getContextPath());cookie.setMaxAge(30);//Cookie的最大存活时间30sresponse.addCookie(cookie);}
}

2.6 手动删除cookie

/*** public void setMaxAge(int expiry)*     将cookie最大存活时间设置成0代表立马删除这个cookie*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies = request.getCookies();for (Cookie cookie : cookies) {cookie.setMaxAge(0);response.addCookie(cookie);System.out.println("delete success");}/*** 1.服务器端检索到请求中的Cookie。* 2.服务器端调用setMaxAge(0)方法,将Cookie的生命周期设置为立即过期。* 3.服务器端将修改后的Cookie通过response.addCookie(cookie)发送到客户端。* 4.客户端浏览器接收到响应,根据Set-Cookie头中的指令删除该Cookie。*/}

2.7 cookie案例

//获取上一次访问该网页的时间    @Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");Cookie cookie = CookieUtils.getCookie("date", request.getCookies());if (cookie == null) {//如果cookie为空,说明为第一次访问response.getWriter().write("这是您第一次访问");} else {String oldDate = cookie.getValue();//cookie不为空时,访问cookie的value值,由于传递过来的是UTF-8格式的数据,所以需要进行解码String newDate = URLDecoder.decode(oldDate, "UTF-8");response.getWriter().write("您上次的访问时间为" + newDate);}//无论if还是else,最终都要对日期进行更新String date = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());//因为date中包含空格等特殊字符,所以先将date编码为UTF-8格式传递给浏览器String newDate = URLEncoder.encode(date, "UTF-8");response.addCookie(new Cookie("date", newDate));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css-01-如何实现“文本过长(文本在一行排),超出部分被省略号代替”

目录 需求代码代码解释 需求 最近写一个项目&#xff0c;遇到了一个问题&#xff0c;就是希望实现下面这种文字效果&#xff1a;文字在一行排&#xff0c;超出的部分用省略号代替 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

【芯片设计- RTL 数字逻辑设计入门 番外篇 12 -- SoC 设计中的 ECO】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 转自&#xff1a;简单了解SoC设计中的ECO — 快乐的芯片工程师 文章目录 ECO 概述Pre-Mask ECO&#xff08;预掩模ECO&#xff09;芯片设计前端与后端的区别 Post-Mask ECO&#xff08;后…

IAR环境下STM32+IAP方案的实现

--基于STM32F103ZET6的UART通讯实现 一、什么是IAP&#xff0c;为什么要IAP IAP即为In Application Programming(在应用中编程)&#xff0c;一般情况下&#xff0c;以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了&#xff0c;如果在设备使…

BM34 判断是不是二叉搜索树

1.题目描述 给定一个二叉树根节点&#xff0c;请你判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。 例&#xff1a; 图1 图2 数据范围&#xff1a;节点数量满足 1≤&#x1d45b;≤104 1≤n≤104…

SpringMVC的底层工作原理?

1.用户发送请求至前端控制器DispatcherServlet. 2.DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器 3.HandlerMapping找到具体的处理器(可以根据 xml 配置、注解进行查找&#xff09;&#xff0c;生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherSe…

SystemUI默认去掉底部导航栏

一、背景 在Android系统中&#xff0c;SystemUI负责管理系统的状态栏、导航栏等用户界面元素。若要在SystemUI中默认去掉底部导航栏&#xff0c;可以通过以下几种方法实现&#xff1a; 1. 修改布局文件 在Android的SystemUI源代码中&#xff0c;底部导航栏的布局文件通常…

AI赋能下的人体摔倒识别技术:深度解析与应用前景

引言 随着人工智能技术的快速发展&#xff0c;AI赋能的解决方案在各行各业中展现出巨大的潜力。特别是在安全监控和健康护理领域&#xff0c;AI技术的应用不仅提高了效率&#xff0c;还极大地提升了安全性。本文将深入探讨思通数科&#xff08;南京&#xff09;信息技术有限公…

【Matlab】RBF径向基神经网络回归预测算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/89564332 资源合集&#xff1a; https://download.csdn.net/download/vvoennvv/89564427 目录 【Matlab】BP 神经网络回归预测算法 【Matlab】CNN-LSTM回归预测 卷积神经网络-长短期记忆神经网络组合模型 …

昇思学习打卡-23-生成式/CycleGAN图像风格迁移互换

文章目录 模型介绍网络结构数据集可视化网络的其他细节模型推理 模型介绍 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。 该模型一个重要应用领域是域迁移(Do…

vue 侧边锚点外圆角

环境&#xff1a;uniapp、vue3、unocss、vant4 效果&#xff1a; 代码 主要是&#xff1a;pointTop 、pointCentent 、pointBottom&#xff0c;这三个样式 html <div v-show"!showPoint" class"fixedLeftDiv"><div><div class"pointT…

XXE:XML外部实体引入

XXE漏洞 如果服务器没有对客户端的xml数据进行限制&#xff0c;且版本较低的情况下&#xff0c;就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件&#xff0c;其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害&#xff1a;任意文件读…

代码:前端与数据库交互的登陆界面

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>登录</title> </head> <body>…

【Linux 14】进程间通信概念

文章目录 &#x1f308; 一、进程间通信的目的&#x1f308; 二、进程间通信的理解&#x1f308; 三、进程间通信的分类 &#x1f308; 一、进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通…

Java GC(垃圾回收)机制详解

Java GC&#xff08;垃圾回收&#xff09;机制详解 1、GC触发的条件2、GCRoots的对象类型 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java的世界里&#xff0c;内存管理是自动进行的&#xff0c;其中垃圾回收&#xff08;Garbage Col…

【JAVA多线程】Future,专为异步编程而生

目录 1.Future 2.CompletableFuture 2.1.为什么会有CompletableFuture&#xff1f; 2.2.使用 2.2.1.提交任务获取结果 2.2.2.回调函数 2.2.3.CompletableFuture嵌套问题 1.Future Java中的Future接口代表一个异步计算。其提供了一组规范用来对异步计算任务进行管理控制…

MySQL8的备份方案——增量备份(CentOS)

MySQL8的增量备份 一、安装备份工具二、备份数据三、准备恢复所需的备份数据四、 恢复备份文件 点击跳转全量(完全)备份 点击跳转差异备份 点击跳转压缩备份 一、安装备份工具 官网 下载地址 备份所用工具为percona-xtrabackup 如果下方安装工具的教程失效&#xff0c;请点击…

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备&#xff0c;支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展&#xff0c;能够与医院HIS、集成平台的有效集成和融合&#xff0c;帮助医院实现了全院医学影像…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时&#xff0c;每个小部件都被视为具有四个同心矩形的框&#xff1a;边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式&#xff1a; 边距超出边框。边框绘制在边…

【深入C++】二叉搜索树

文章目录 什么是二叉搜索树二叉搜索树的接口1.查找操作2.插入操作3.中序遍历4.删除操作 所有代码总结 什么是二叉搜索树 二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;是一种特殊的二叉树&#xff0c;其每个节点最多有两个子节点&#xff0c;分别称为左子节点和…

C++实现数组中是否存在递增三元组的巧妙方法【奇思妙想】

C实现数组中是否存在递增三元组的巧妙方法 在解决数组问题时&#xff0c;尤其是涉及到子序列的查找&#xff0c;我们需要考虑时间复杂度和空间复杂度&#xff0c;以确保算法的效率。我们将介绍一种高效的解决方案&#xff0c;详细讲解其思路和实现。 问题描述 给你一个整数数…