cookie工作原理:

 cookie代码:

 1 @WebServlet(value = "/cookie",name = "CookieServlet")
2 public class CookieServlet extends HttpServlet {
3
4 @Override
5 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
6 String username=req.getParameter("username");
7 String password=req.getParameter("password");
8 //String expire=req.getParameter("expire");//获取前端传入多久之内自动登录
9
10 //创建cookie对象将我们的用户名以及密码设置到cookie中
11 Cookie usernameCookie=new Cookie("username",username);
12 //给cookie设置过期的时间,其单位是秒 10秒后下面的测试类就拿不到我们的用户名以及密码了
13 usernameCookie.setMaxAge(10);
14
15 Cookie passwordCookie=new Cookie("password",password);
16 passwordCookie.setMaxAge(10);
17
18 //cookie的响应
19 resp.addCookie(usernameCookie);
20 resp.addCookie(passwordCookie);
21
22 }
23 }

浏览器里面的记录:

 测试类:

 1 @WebServlet(value = "/cookieTest",name = "CookieTestServlet")
2 public class CookieTestServlet extends HttpServlet {
3 @Override
4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5
6 //获取所有的cookie的信息
7 Cookie[]cs=req.getCookies();
8
9 if(cs!=null){
10 for (Cookie c:cs){
11 System.out.println(c.getName()+"===="+c.getValue());
12 }
13 }
14
15 }

后台拿到的记录:

 Session(会话)对象出现的原因:是因为HTTP协议是一个无状态的协议。

  比如你登录淘宝  当你登录到自己的账号的时候无论你点击哪个标题页面  都会有你的淘宝用户名

流程:

代码:

 1 @WebServlet(value = "/session",name = "SessionServlet")
2 public class SessionServlet extends HttpServlet {
3
4 @Override
5 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
6
7 User user=new User();
8 user.setId(1);
9 user.setName("张三");
10
11 //通过请求去获取session
12 HttpSession session=req.getSession();
13 session.setAttribute("user",user);
14
15 }
16 }

然后在每一个servlet里面都加上:

然后在浏览器里面先运行:

 把控制台清除,然后访问不同的servlet都可以得到:

 还有在浏览器第一次访问session的时候没有 当再访问其他的servlet的时候就会出现sessionID:

注意:如果浏览器关闭后,再打开浏览器访问我们的session那么我们的浏览器会重新弄个sessionID给你,不关浏览器就不会改变。

application:

 说白了他在整个服务器就一个值

先在context里面设置我们的用户姓名:

1 @WebServlet(value = "/context",name = "ContextServlet")
2 public class ContextServlet extends HttpServlet {
3
4 @Override
5 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
6 ServletContext servletContext=req.getServletContext();
7 servletContext.setAttribute("name","王五");
8 }
9 }

然后再其他的servlet里面获取我们的姓名:

 1 /**
2 * 在往后的登录过程中, 登录成功后都会将用户的个人信息放置到session中。
3 */
4 @WebServlet(value = "/login",name = "LoginServlet")
5 public class LoginServlet extends HttpServlet {
6
7 @Override
8 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
9
10 String username = req.getParameter("username");
11 String password = req.getParameter("password");
12
13 // select * from user where username = ? and password = ?
14 User user = new User();
15 user.setName(username);
16 user.setId(34);
17
18 req.getSession().setAttribute("user", user);
19
20 // 获取全应用唯一的一个 ServletContext类型的对象,单例
21 ServletContext servletContext = req.getServletContext();
22 System.out.println(servletContext.getAttribute("name"));
23
24 }
25 }

然后在浏览器里面先把context跑起来在运行其他的servlet在后台你会看见:

直接访问我们的jsp页面也可以:

 总结:

  cookie 是客户端(浏览器)存储。
  session是服务器端存储的。
  application 是ServletContext类型的对象,全局就唯一一个。无论是通过何种API,拿到的都是同一个对象。
  

cookie,session以及application的比较的更多相关文章

  1. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  2. c# Cookie,Session,Application,Cache 四种缓存使用情景

    好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...

  3. Asp.net 中ViewState,cookie,session,application,cache的比较

    Asp.net 中的状态管理维护包含ViewState,cookie,session,application,cache五种方式,以下是它们的一些比较: 1.存在于客户端还是服务端 客户端: view ...

  4. JavaWeb -cookie&session&application

    cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...

  5. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  6. cookie、session和application都是些什么神?——图文加案例,不怕你不会,就怕你不看

    cookie.session和application都是些什么神? 前言: 一直想写一篇关于cookie和session的博客,由于种种原因,一直没有整理,这不,今天还就遇到问题了,之前虽然会,但是好 ...

  7. 了解ASP(三) -- Cookie, Session, Application

    ASP一共内建了7个对象,有Session.Application.Cookie.Response.Request.Server,这些对象都可以直接使用. 1. 什么是 Cookie? 1. cook ...

  8. cookie session URL重写 与考试

    状态管理.Cookie.Session.URL重写 HTTP协议:无状态的连接(每次连接都是新的请求)1.隐藏字段 <input type="hidden" name=&qu ...

  9. servlet三大作用域:request,session,application

    javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. request request是表示一个请求,只要 ...

  10. Session、Application、Cache

    [Asp.Net]状态管理(Session.Application.Cache) 上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329 ...

随机推荐

  1. Bash Shell 30min 过家家

    带你捅破窗户纸 - 备注 : @博客园 : 1. 为什么不支持 pdf 上传了呀 2. 网站分类不好用 3. 排版OA工具升级下, 例如 markdown 写出来好丑. 尝试升级下呢 ? 后记: 学如 ...

  2. ModuleNotFoundError: No module named '_sqlite3' when Python3

    前言 运行 python 报错:ModuleNotFoundError: No module named '_sqlite3' 解决 重新编译安装 python ./configure --enabl ...

  3. Prometheus Go client library 详解

    介绍 Prometheus 支持 4 种 指标类型,分别是 Counter.Gauge.Histogram 和 Summary. Counter 指标类型,指标值是只能递增,不能递减的数值.需要注意的 ...

  4. 基础指令:grep、wc、管道符( | )、head、tail、less、more、sort、uniq、Linux软件安装、重定向及

    目录 3.0 dd读取.转换并输出数据 3.1 压缩 (tar.zip).解压缩(tar xf.unzip) 3.2 ln软硬链接 3.2.1 软链接: 3.2.2 硬链接: 3.3 find文件查找 ...

  5. Alice与Bob-整数分解问题脚本实现

    题目: 密码学历史中,有两位知名的杰出人物,Alice和Bob.他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底.就像在数学王国中的素数一样,孤傲又热情.下面是一个大整数:985 ...

  6. RMQ 和 LCA 问题

    # Part 1 RMQ RMQ,即区间信息维护问题 如最大值,最小值,GCD 等 RMQ 算法实现很多 具体有线段树,树状数组和 ST 表 但综合时间复杂度最好的是 ST 表 查询 O(1),预处理 ...

  7. 一个基于 .NET 开源免费的异地组网和内网穿透工具

    前言 今天大姚给大家分享一个基于 .NET 开源免费的异地组网和内网穿透工具:linker. 工具介绍 linker是一个基于 .NET8 开源免费(GPL-2.0 license)的异地组网和内网穿 ...

  8. leetcode每日一题:监控二叉树

    引言 ​ 今天的每日一题原题是2643. 一最多的行,直接模拟,切除和最大的一行即可.更换成前几天遇到的更有意思的一题来写这个每日一题. 题目 968. 监控二叉树 给定一个二叉树,我们在树的节点上安 ...

  9. 学习unigui【25】关于图标

    网上有不少介绍. 自己的经验: 是否需要下载文件fontawesome-free-6.5.1-web(),没有研究.说ext_js已经下载配套了. 我很懒,得过且过. 1.下载fontawesome- ...

  10. 主存的扩展及其与CPU的连接——字扩展

    一块芯片的容量为\(2^{18}B\),而该CPU需要的容量为:\(2^{地址总线位宽}\)=\(2^{21}B\),所以需要8片该芯片来扩展. 由于CPU由21个地址引脚,芯片只有18个地址引脚,C ...