Cookie

Cookie是服务器通知客户端保存键值对的一种技术
客户端有了Cookie后,每次请求都发送给服务器
每个Cookie的大小不能超过4kb

Cookie的创建


package com.test;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 createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建Cookie对象Cookie cookie=new Cookie("key1","value1");//2.通知客户端保存Cookieresp.addCookie(cookie);resp.getWriter().write("Cookie创建成功");//可以一次创建多个Cookie}
}

Cookie保存在客户端

<li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建</a></li>
<li><a href="cookieServlet?action=getCookie" target="target">Cookie的获取</a></li>
<li><a href="cookieServlet?action=updateCookie" target="target">Cookie值的修改</a></li>

服务器如何获取Cookie

package com.test;import com.utils.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 createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建Cookie对象Cookie cookie1=new Cookie("key1","value1");Cookie cookie2=new Cookie("key2","value2");//2.通知客户端保存Cookieresp.addCookie(cookie1);resp.addCookie(cookie2);resp.getWriter().write("Cookie创建成功");}protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();Cookie iWantCookie= CookieUtils.findCookie("key1",cookies);}
}
package com.utils;import javax.servlet.http.Cookie;public class CookieUtils {//查找指定名称的Cookieduixpublic static Cookie findCookie(String name, Cookie[]cookies){if(name==null||cookies==null|| cookies.length==0){return null;}//没有提供直接获取一个Cookie的方法,只能用遍历+判断for(Cookie cookie:cookies){//getName方法返回Cookie的key//getValue方法返回Coookie的value值// resp.getWriter().write("Cookie["+cookie.getName()+"]="+cookie.getValue()+"\n");if(name.equals(cookie.getName())){return cookie;}}return null;}
}

Cookie值的修改

方案一:
1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
2、在构造器,同时赋于新的 Cookie 值。
3、调用 response.addCookie( Cookie );

 protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();
//        方案一:
//        1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象Cookie cookie=new Cookie("key1","newvalue1");
//        2、在构造器,同时赋于新的 Cookie 值。//通知客户端保存修改resp.addCookie(cookie);
//        3、调用 response.addCookie( Cookie );resp.getWriter().write("key1的Cookie已经修改好");}

方案二:
1、先查找到需要修改的 Cookie 对象
2、调用 setValue()方法赋于新的 Cookie 值。
3、调用 response.addCookie()通知客户端保存修改

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();//          方案二:
//          1、先查找到需要修改的 Cookie 对象Cookie cookie=CookieUtils.findCookie("key2", cookies);
//          2、调用 setValue()方法赋于新的 Cookie 值。if(cookie!=null){cookie.setValue("newValue2");//不支持中文,如果想支持中文必须使用BASE64编码}
//          3、调用 response.addCookie()通知客户端保存修改resp.addCookie(cookie);resp.getWriter().write("key2的Cookie已经修改好");}
}

查看Cookie

F12

Cookie的生命控制

指的是如何管理Cookie什么时候被销毁
setMaxAge()
默认值为-1
public void setMaxAge(int expiry)
设置 cookie 的最大生存时间,以秒为单位。
正值
表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间,不是 cookie 的当前生存时间。
负值–Seession
意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。
0 值
马上删除 cookie

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cookie</title><base href="http://localhost:8080/12_Cookie/"/>
<style type="text/css">ul li {list-style: none;}</style>
</head>
<body><iframe name="target" width="500" height="500" style="float: left;"></iframe><div style="float: left;"><ul><li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建</a></li><li><a href="cookieServlet?action=getCookie" target="target">Cookie的获取</a></li><li><a href="cookieServlet?action=updateCookie" target="target">Cookie值的修改</a></li><li>Cookie的存活周期</li><li><ul><li><a href="cookieServlet?action=defaultLife" target="target">Cookie的默认存活时间(会话)</a></li><li><a href="cookieServlet?action=deleteNow" target="target">Cookie立即删除</a></li><li><a href="cookieServlet?action=life3600" target="target">Cookie存活3600秒(1小时)</a></li></ul></li><li><a href="" target="target">Cookie的路径设置</a></li><li><a href="" target="target">Cookie的用户免登录练习</a></li></ul></div>
</body>
</html>
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie=new Cookie("key3","defaultLife");if(cookie!=null) {cookie.setMaxAge(-1);//设置存活时间resp.addCookie(cookie);//调用后才能生效}}protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie=new Cookie("key4","defaultLife");if(cookie!=null) {cookie.setMaxAge(0);//设置存活时间,0表示马上删除resp.addCookie(cookie);resp.getWriter().write("k4的Cookie已经被删除");}}protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie=new Cookie("key7","defaultLife");if(cookie!=null) {cookie.setMaxAge(3600);//设置存活时间,3600sresp.addCookie(cookie);resp.getWriter().write("已经创建了一个存活1h的Cookie");}}

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 发送

protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie=new Cookie("path","path1");//getContextPath()得到工程路径cookie.setPath(req.getContextPath()+"/abc");resp.addCookie(cookie);resp.getWriter().write("创建了一个带有path路径的Cookie");}

练习 免用户名登录

实现细节

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><form action="http://localhost:8080/12_Cookie/loginServlet" method="get">用户名:<input type="text" name="username" value="${cookie.username.value}"/></br>密码:<input type="password" name="password" /></br><input type="submit" value="登录"/></form>
</body>
</html>
package com.test;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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if("ddd".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("登陆失败");}}
}

Java web学习day12 Cookie相关推荐

  1. java web学习笔记(持续更新)

    java web学习笔记 一.Java Web简介 二.认识Servlet 1.什么是Servlet? 2.请求路径 3.tomcat 4.Servlet的使用 三.Servlet简单应用 1.创建S ...

  2. java web学习项目20套源码完整版

    java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...

  3. 2019年Java Web学习笔记目录

    Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...

  4. Java Web 学习路线

    Java Web 学习路线 实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了. 大三的时候,我萌生了放弃本专业的念头,断断续续学 Java ...

  5. Java Web 学习路线(2018)

    实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了. 大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总 ...

  6. Java web学习文档

    Java web 一,第一章 1,tomcat的下载及配置部署 学习本章内容需要具备以下知识点 java基础知识 面向对象oop思想 java进阶 数据库 前端网页技术(html/css/js/jqu ...

  7. 1、JAVA web学习笔记

    以下内容是在学习某机构视频过程中记录的笔记,不准确的地方请大家评论指正. JavaWeb是使用Java语言开发基于互联网的项目. 资源分类有两类: 静态资源: 使用静态网页开发技术发布的资源. 特点: ...

  8. java web学习笔记-jsp篇

    转载自:http://www.cnblogs.com/happyfans/archive/2015/03/17/4343571.html 1.java web简介 1.1静态页面与动态页面   表现形 ...

  9. [原创]java WEB学习笔记02:javaWeb开发的目录结构

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

最新文章

  1. Ubuntu Server 更改hostname
  2. java 8 parallelStream()
  3. python几种括号表示的类型
  4. linux删除命令_【小技巧】Linux命令的快捷键
  5. 破产的圣文森特医院,如何利用大数据寻求解救方案?
  6. 视频码率[百科词条]
  7. 信号与系统(一) 能量信号和功率信号
  8. Android-StepsView
  9. Timus 1005. Stone pile
  10. 微信表情商店视频动态暂停使用 6日恢复
  11. C++游戏编程教程(三)
  12. python机器学习之回归预测:电池续航里程问题
  13. SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)
  14. 【ChatGPT】| 最全七大场景50+小场景应用指南合集——内部指导版本(AI训练师必备,带案例)
  15. STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)
  16. mysql 嵌套查询性能_mysql SQL优化之嵌套查询-遁地龙卷风
  17. docker使用文档1
  18. Unity旋转之四元数(开关车门,第一人称控制器)
  19. C#毕业设计——基于C#+asp.net+sqlserver的中学图书馆系统设计与实现(毕业论文+程序源码)——图书馆系统
  20. 购买域名和ICP备案的流程以及遇到的问题

热门文章

  1. Android Matrix基本原理方法
  2. 道高一尺魔高一丈:iOS破解应用下载中心AppTrackr VS. 苹果
  3. python 3.6 tensorflow_python3.6安装,以及安装tensorflow
  4. 牛客寒假算法基础集训营6 I-wzoi
  5. 联想台式计算机 恢复出厂设置,联想台式电脑怎么恢復出厂设置
  6. LG G3升级Android 6.0 Marshmallow方法亲测!界面渲染精美,拒绝卡顿,提升续航!
  7. LightGBM是个什么东东?好像很耳熟啊,怎么玩啊?如何调参?一文搞定!
  8. actor中!(tell)与forward的区别
  9. 大数据ui设计师_为什么设计师应该使用真实数据
  10. Bayesian Nonparametric Learning of Cloth Models for Real-Time State Estimation