文章目录

  • 零、本节学习目标
  • 一、会话概述
    • (一)会话的概念
    • (二)全局数据共享
  • 二、Cookie对象
    • (一)什么是Cookie
      • 1、Cookie的概念
      • 2、如何设置Cookie
      • 2、Cookie操作示意图
    • (二)了解Cookie API
      • 1、构造方法
      • 2、常用方法
        • (1)setMaxAge(int expiry)方法和getMaxAge()方法
        • (2)setPath(String uri)方法和getPath()方法
        • (3)setDomain(String pattern)方法和getDomain()方法
    • (三)使用Cookie的语法
      • 1、导入包
      • 2、创建Cookie
      • 3、写入Cookie
    • (四)Cookie案例演示
      • 1、显示用户上次访问时间
      • 2、保存登录用户名信息
  • 三、Session对象
    • (一)什么是Session
    • (二)了解HTTPSession API
    • (三)Session的生命周期
    • (四)Session案例演示
  • 四、Application对象
    • (一)什么是Application
    • (二)了解Application API
    • (三)Application案例演示

零、本节学习目标

  1. 了解什么是Cookie
  2. 掌握Cookie对象的使用
  3. 了解什么是Session
  4. 掌握Session对象的使用
  5. 了解什么是Application
  6. 掌握Application对象的使用

​​

当用户通过浏览器访问Web应用时,通常情况下,服务器需要对用户的状态进行跟踪。例如,用户在网站结算商品时,Web服务器必须根据请求用户的身份,找到该用户所购买的商品。在Web开发中,服务器跟踪用户信息的技术称为会话技术,本节将针对会话及会话技术进行详细讲解。

一、会话概述

  • 目标:了解会话的概念,能够知道会话用于做什么

(一)会话的概念

  • 在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。在打电话过程中,通话双方会有通话内容,同样,在客户端与服务器交互的过程中,也会产生一些数据。例如,用户甲和乙分别登录了购物网站,甲购买了一个iPhone手机,乙购买了一个iPad,当这两个用户结账时,Web服务器需要对用户甲和乙的信息分别进行保存。为了保存会话过程中产生的数据,Servlet提供了两个用于保存会话数据的对象,分别是Cookie和Session

(二)全局数据共享

  • 动态网站开发出来,自然供多个用户使用,而application对象类似于系统的“全局变量”,用于实现用户之间的数据共享。

二、Cookie对象

(一)什么是Cookie

  • 目标:了解什么是Cookie

1、Cookie的概念

  • 在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名,手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在Web应用中,Cookie的功能类似于会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,如用户信息和商品信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确地响应。

2、如何设置Cookie

  • 服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie的具体示例:Set-Cookie: user=howard; path=/;
  • user表示Cookie的名称,howard表示Cookie的值,path表示Cookie的属性。Cookie必须以键值对的形式存在,Cookie属性可以有多个,属性之间用分号“;”和空格分隔。

2、Cookie操作示意图

  • 当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将用户信息以Cookie的形式发送给浏览器。一旦用户浏览器接受了服务器发送的Cookie信息,就会将它保存在浏览器的缓冲区中,这样,当浏览器后续访问该服务器时,都会在请求消息中将用户信息以Cookie的形式发送给服务器,从而使服务器分辨出当前请求是由哪个用户发出的

(二)了解Cookie API

  • 目标:掌握Cookie类的构造方法和常用方法

1、构造方法

  • Cookie类有且仅有一个构造方法,具体语法格式:public Cookie(java.lang.String name, java.lang.String value);
  • 在Cookie的构造方法中,参数name用于指定Cookie的名称,value用于指定Cookie的值。需要注意的是,Cookie一旦创建,它的名称就不能再更改,Cookie的值可以为任何值,创建后允许被修改。

2、常用方法

方法声明 功能描述
String getName() 用于返回Cookie的名称
void setValue(String newValue) 用于为Cookie设置一个新的值
String getValue() 用于返回Cookie的值
void setMaxAge(int expiry) 用于设置Cookie在浏览器客户机上保持有效的秒数
int getMaxAge() 用于返回Cookie在浏览器客户机上保持有效的秒数
void setPath(String uri) 用于设置该Cookie项的有效目录路径
String getPath() 用于返回该Cookie项的有效目录路径
void setDomain(String pattern) 用于设置该Cookie项的有效域
String getDomain() 用于返回该Cookie项的有效域
void setVersion(int v) 用于设置该Cookie项采用的协议版本
int getVersion() 用于返回该Cookie项采用的协议版本
void setComment(String purpose) 用于设置该Cookie项的注解部分
String getComment() 用于返回该Cookie项的注解部分
void setSecure(boolean flag) 用于设置该Cookie项是否只能使用安全的协议传送
boolean getSecure() 用于返回该Cookie项是否只能使用安全的协议传送

(1)setMaxAge(int expiry)方法和getMaxAge()方法

  • setMaxAge(int expiry)getMaxAge()方法分别用于设置和返回Cookie在浏览器上保持有效的秒数。如果设置的值为一个正整数,浏览器会将Cookie信息保存在本地硬盘中。从当前时间开始,在没有超过指定的秒数之前,这个Cookie都保持有效,并且同一台计算机上运行的该浏览器都可以使用这个Cookie信息。如果设置值为负整数,浏览器会将Cookie信息保存在浏览器的缓存中,当浏览器关闭时,Cookie信息会被删除。如果设置值为0,则浏览器会立即删除这个Cookie信息。

(2)setPath(String uri)方法和getPath()方法

  • setPath(String uri)方法和getPath()方法是针对Cookie的Path属性的。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的目录及其子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将其Path属性设置为“/”。

(3)setDomain(String pattern)方法和getDomain()方法

  • setDomain(String pattern)方法和getDomain()方法是针对Cookie的domain属性的。domain属性用于指定浏览器访问的域。例如,泸职院的域为“lzy.edu.cn”。设置domain属性时,其值必须以“.”开头,如domain=.lzy.edu.cn默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息发送给服务器(当前主机)。需要注意的是,domain属性的值不区分大小写。

(三)使用Cookie的语法

1、导入包

  • import = "javax.servlet.http.Cookie"

2、创建Cookie

  • Cookie newCookie = new Cookie("parameter", "value");
参数 含义
parameter 用于代表cookie的名称(key)
value 用于表示当前key名称所对应的值

3、写入Cookie

  • response.addCookie(newCookie)

(四)Cookie案例演示

  • 创建Web项目 - CookieDemo
  • 设置项目名称与保存位置
  • 单击【Finish】按钮
  • 在项目结构窗口里修改Artifact名称
  • 编辑服务器配置,重新部署项目,URL变成http://localhost:8080/CookieDemo/

1、显示用户上次访问时间

  • 创建net.huawei.servlet包,然后在里面创建LastAccessServlet
package net.huawei.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 功能:显示用户上次访问时间* 作者:华卫* 日期:2023年03月25日*/
@WebServlet(value = "/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {//指定服务器输出内容的编码方式UTF-8,防止发生乱码response.setContentType("text/html;charset=utf-8");//获取所有cookieCookie[] cookies = request.getCookies();//定义flag的boolean变量,用于判断cookies是否为空boolean flag = false;//遍历cookie数组if (cookies.length > 0 && cookies != null) {for (Cookie cookie : cookies) {//获取cookie的名称String name = cookie.getName();//判断名称是否是lastTimeif ("lastTime".equals(name)) {//有该cookie不是第一次访问flag = true;//响应数据//获取cookie的value时间String value = cookie.getValue();System.out.println("解码前:" + value);//URL解码value = URLDecoder.decode(value, "utf-8");System.out.println("解码后:" + value);response.getWriter().write("欢迎回来,您上次访问时间:" + value);//设置cookie的value//获取当前时间的字符串,重新设置cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String strDate = sdf.format(date);System.out.println("编码前:" + strDate);//URL编码strDate = URLEncoder.encode(strDate, "utf-8");System.out.println("编码后:" + strDate);cookie.setValue(strDate);//设置cookie存活时间cookie.setMaxAge(60 * 60 * 24 * 30);    //一个月//加入当前cookie请求时间response.addCookie(cookie);break;}}//如果cookies中没有时间,也就是没有访问过if (cookies == null || cookies.length == 0 || flag == false) {//设置cookie的value//获取当前时间的字符串,重新设置cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");String strDate = sdf.format(date);System.out.println("编码前:" + strDate);//URL编码strDate = URLEncoder.encode(strDate, "utf-8");System.out.println("编码后:" + strDate);Cookie cookie = new Cookie("lastTime", strDate);//设置cookie存活时间cookie.setMaxAge(60 * 60 * 24 * 30);//一个月response.addCookie(cookie);response.getWriter().write("您好,欢迎您首次访问本网站~");}}}
}
  • 启动服务器,访问http://localhost:8080/CookieDemo/LastAccessServlet

  • 查看控制台输出信息

  • 刷新访问地址http://localhost:8080/CookieDemo/LastAccessServlet,浏览器显示了用户的上次访问时间,这是因为用户第一次访问LastAccessServlet时,LastAccessServlet向浏览器发送并保存用户访问时间的Cookie信息。第二次访问LastAccessServlet时,服务器读取该Cookie信息,并在浏览器显示

  • 查看控制台输出信息

  • 关闭浏览器后,再次打开浏览器,访问LastAccessServlet,浏览器依旧显示了时间,是因为我们在LastAccessServlet类的代码中设置了Cookie的有效时间为1个月。

2、保存登录用户名信息

三、Session对象

(一)什么是Session

(二)了解HTTPSession API

(三)Session的生命周期

(四)Session案例演示

四、Application对象

(一)什么是Application

(二)了解Application API

(三)Application案例演示

动态网站开发讲课笔记05:会话及会话技术相关推荐

  1. 动态网站开发讲课笔记04:Servlet基础

    文章目录 零.本节学习目标 一.Servlet基础 (一)Servlet概述 1.Servlet是什么 2.Servlet容器 3.Servlet应用程序的体系结构 (二)Servlet的特点 1.功 ...

  2. 动态网站开发讲课笔记02:Java Web概述

    文章目录 零.本节学习目标 一. XML基础 (一)XML概述 1.XML 2.XML与HTML的比较 (二)XML语法 1.XML文档的声明 2.XML元素的定义 3.XML属性的定义 4.XML注 ...

  3. 动态网站开发讲课笔记03:HTTP协议

    文章目录 零.本节学习目标 一.HTTP概述 (一)HTTP的概念 1.HTTP的概念 2.HTTP协议的特点 (1)C/S模式 (2)简单快速 (3)灵活 (4)无状态 (二)HTTP 1.0和HT ...

  4. php动态网站开发报告,PHP动态网站开发pdf

    PHP动态网站开发 作者:赵增敏 PHP动态网站开发 出版社:电子工业出版社 PHP动态网站开发 内容简介 本书从Adobe Dreamweaver CS6可视化设计与手工编码的结合上详细地介绍了基于 ...

  5. 《PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)》示例源码课件教学视频免费下载

    #好书推荐##好书奇遇季#<PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)>京东当当天猫都有发售. PHP+MySQL的组合是目前世界上流行的Web开发工具,被大型互联网 ...

  6. php动态网站开发论文,浅谈《基于PHP的动态网站开发》课程的项目案例设计

    电子论文 浅谈<基于PHP的动态网站开发>课程的项目案例设计 时间:2020年05月25日 所属分类:电子论文 点击次数: [摘要]在教学资源建设中,案例设计建设是非常重要的资源之一.运用 ...

  7. ASP.NET动态网站开发培训-40.互动论坛制作(八、登陆页面和管理主页面)

    ASP.NET动态网站开发培训-40.互动论坛制作(八.登陆页面和管理主页面) forumLogin页面 1.添加Login控件 2.设置Login控件 DestinationPageUrl:&quo ...

  8. ASP.NET动态网站开发培训-41.互动论坛制作(九、制作管理员详细页面)

    ASP.NET动态网站开发培训-41.互动论坛制作(九.制作管理员详细页面) 课程安排 添加并设置两个数据源控件 添加设置FormView控件 添加设置DataList控件 处理DataList控件的 ...

  9. php实训ppt,PHP动态网站开发实例教程教学全套课件(刘万辉)配套资料 任务3:运用目录与文件实现投票统计.ppt...

    PHP动态网站开发实例教程教学全套课件(刘万辉)配套资料 任务3:运用目录与文件实现投票统计.ppt (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! ...

最新文章

  1. 惠普鼠标g260_惠普g260鼠标怎么样 惠普鼠标怎么样?
  2. 最短路的那些有趣的模型(不定期更新)
  3. 二次探测再散列_杭州二次元影像测量仪
  4. linux7启动某个服务器,如何在单用户模式下启动RHEL 7 CentOS 7服务器
  5. ObserveIT Client安装后屏幕延迟问题
  6. 捷径 - The certain shortcut
  7. 判断用户名和密码是否正确java_facebook中如何判断用户名和密码是否正确
  8. 科目三夜考考试内容及过关攻略
  9. Struts2源码阅读(三)_DispatcherConfigurationProvider
  10. STM32之独立看门狗原理
  11. 在Word中如何实现后退?
  12. Redis master和slave是如何实现数据同步的
  13. 何凯明团队又出新论文,北大、上交校友教你用ViT做迁移学习
  14. c语言的log算法实现,C语言中有关log函数的算法
  15. virtualbox安装步骤
  16. MTK6577 编译报错
  17. 【pandas】reset_index函数详解
  18. 无法复制Word文档里的内容
  19. 如何创建 2023 年营销日历(内含免费模板和示例)
  20. 房子,婚姻,名字,这三个关键词,你怎么看?

热门文章

  1. Oracle:用_minimum_giga_scn 解决无法启动的数据库
  2. ubuntu android源码下载
  3. cni k8s 插件安装_k8s的CNI网络插件-flannel
  4. 运维基本功(五):Linux文件管理-用户管理
  5. java html ubb_简单的Html转换UBB的程序
  6. 自媒体写作如何变现?5招教你成为自媒体达人
  7. 【碎了一地的诺言,再也拼凑不回昨天】
  8. Android蓝牙开发记录
  9. 读《拖延心理学》:战胜拖延症的方法
  10. 2023最新独立后台茶杯狐影视网站PHP系统源码+大气UI高级