• 【servelt原理_13_状态管理】


    状态管理

    1.现有问题

    • Http是无状态的,不能保存每次提交的信息
    • 如果用户发来一个新的请求,服务器无法知道它是否与上次请求是否有联系.
    • 对于那么需要提交多次信息才能完成的操作,比如购物,就很有问题

    2.概念
    将浏览器和web服务器之间多次交互当成一个整体来处理,并且将多次交互所涉及的数据(即状态)保存先来。

    3.状态管理分类

    • 客户端状态管理:将状态保存在客户端。代表性技术就是Cookie技术
    • 服务器状态管理: 将状态保存在服务端,代表性技术就是Session技术

    Cookie的使用

    1.什么是cookie
    Cookie是服务器发送到用户浏览器并保持在本地的一小块信息,他会在浏览器下次向服务器发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器。
    在这里插入图片描述
    2.cookie的基本操作

    @WebServlet("/cs")
    public class CookieServlet extends HttpServlet{
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//1.服务端创建cookie对象
    		Cookie cookie = new Cookie("username", "qcby");
               //2.设置cookie有效期 1 小时  
               cookie.setMaxAge(60*60);  // 存储数据有三种方式:>0有效期,单位秒;=0浏览器关闭;<0 临时存储,默认为-1
    		//3.将cookie响应给客户端
    		resp.addCookie(cookie);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    访问:http://localhost:8080/SecondServlet/cs
    查看cookie
    我们可以在chrome浏览器的设置—>隐私设置和安全性中找到查看Cookie和网站数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.cookie的获取
    浏览器jquary获取cookie

    function getCookie(cname){
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i=0; i<ca.length; i++) {
            var c = ca[i].trim();
            if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
        }
        return "";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    服务器获取cookie的值

    @WebServlet("/getCookie")
    public class GetCookieServlet extends HttpServlet {
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 通过request对象获取所有的cookie
    		Cookie[] cookies = req.getCookies();
    		// 通过for循环遍历cookie
    		if (cookies != null) {
    			for (Cookie cookie : cookies) {
    				System.out.println(cookie.getName() + " " + cookie.getValue());
    			}
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.Cookie的编码和解码
    cookie默认不支持中文,只能包含ASCII码。所以cookie需要对Uncode字符进行编码,否则会出现乱码
    ①:创建带有中文的cookie

    @WebServlet("/cs")
    public class CookieServlet extends HttpServlet{
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//1.服务端创建cookie对象
    		Cookie cookie = new Cookie(
    				URLEncoder.encode("姓名","UTF-8"),
    				URLEncoder.encode("张三","UTF-8")
    				);
    	   //2.设置cookie有效期 1 小时
    	    cookie.setMaxAge(60*60);
    		//3.将cookie响应给客户端
    		resp.addCookie(cookie);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ②:解码带有中文的cookie

    @WebServlet("/getCookie")
    public class GetCookieServlet extends HttpServlet {
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 通过request对象获取所有的cookie
    		Cookie[] cookies = req.getCookies();
    		// 通过for循环遍历cookie
    		if (cookies != null) {
    			for (Cookie cookie : cookies) {
    				System.out.println(URLDecoder.decode(cookie.getName(),"UTF-8")+" " + URLDecoder.decode(cookie.getValue(),"UTF-8"));
    			}
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5.cookie的优缺点
    优点:

    • 可配置到期规则
    • 简单性:cookie是一种包含文本轻量结构,包含简单的键值对
    • 数据持久性:cookie默认在过期之前可以一直保存在客户端浏览器上

    缺点:

    • 大小受限制:大多数浏览器对cookie的大小有限制,分别是4k和8k字节
    • 用户配置为禁用:有些用户禁用了浏览器或者客户端设备接收cookie的能力,因此限制了这一功能
    • 潜在的安全风险:Cookie可能被篡改
  • 相关阅读:
    Idea 编译SpringBoot项目Kotlin报错/Idea重新编译
    中国大数据与实体经济融合发展白皮书2019整理
    【正点原子STM32连载】 第三十一章 ADC实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    从 Elastic 的 Go APM 代理迁移到 OpenTelemetry Go SDK
    第六章:最新版零基础学习 PYTHON 教程—Python 正则表达式(第一节 - Python 正则表达式)
    练习题35
    【代码随想录Day53】图论Part05
    云端IDE的技术选型1
    HTML+CSS期末大作业 中国传统美食网站设计 节日美食13页 html5网页设计作业代码 html制作网页案例代码 html大作业网页代码
    TypeScript常见类型错误 | 类型EventTarget上不存在属性 - ts中的dom类型
  • 原文地址:https://blog.csdn.net/edwer93/article/details/128167614