JAVAWEB 数据共享

2023-05-16

数据共享:OneServlet工作完毕后将所要共享的数据发送给TwoServlet中。

四种数据共享的方法:
1.ServletContext
2.Cookie
3.HttpSession
4.HttpservletRequest

ServletContext
当两个Servlet与同一个网站之中,就可以使用SevletContext实例对象实现数据共享。
我们也叫该对象为全局作用域对象

使用请求体对象的getServletContext()方法来获取ServletContext对象,我们可以将这个对象看做专门放置数据的的篮子,放置在这个篮子中的数据,则可以被其他的Servlet对象所使用。我们可以通过这个全局作用对象setAttribute("key1",数据)方法以键值对的方式实现数据的放置,使用全局作用对象setAttribute("key1")方法取得数据,取得的数据类型为Object类需要进行强制转换。

在这里插入图片描述

Cookie
使用Cookie来进行数据共享要求:同一个网站、同一个浏览器。
用于存放用户的私人数据,在共享数据中提高服务质量。

在这里插入图片描述
Cookie card = new Cookie(String key.String values)
直接使用Cookie对象的构造方法创建Cookie对象,一个Cookie对象只能存放一个键值对并且全是String类型。
resp.addCookie(card)
使用响应对象的addCookie(Cookie card)来将Cookie对象写入到响应头之中。
Cookie [] cards = req.getCookies()
使用请求对象的getCookies()获取Cookies数组。
用Cookie对象的getName()来读取key
getValue()来读取value。

Cookie的生命周期:1.浏览器关闭,Cookie销毁。2.手动设置的情况下,要求接收的Cookie存放在计算机硬盘当中,同时指定存活时间,关闭客户端、服务器都不会导致Cookie销毁,存活时间到,删除存放的Cookie。使用Cookie对象的setMexAge(秒)来设置存活时间。

HttpSession接口
1.使用HttpSession接口共享数据的要求:同一网站、同一浏览器。
也将它称为会话作用域对象。

2.与Cookie的区别:
存储位置:Cookie存储在浏览器或计算机硬盘中,而HttpSession接口存储在服务器中。
数据类型:Cookie只能存放String类型的数据,而HttpSession可以存放任意类型的数据。
数据数量:Cookie只能存放一对数据,而HttpSession可以存放任意数量的数据。
Cookie类似在服务端的会员卡,而HttpSession类似保险柜。

3.命令实现:
请求体的getSession()方法获取HttpSeseion对象。
会话作用域对象的setArribute(String key,Object data)来存放数据,getArribute(String key)则就是取数据。

有时候我们无法知道,HttpSession对象中的键值,采用会话作用域对象的getAttributeNames()方法可以取得匿名类的数组对象,将其遍历得到我们想要的数据。

Enumeration goodsNames = session.getAttributeNames();
while(goodsNames.hasmoreElements()){
	String goodsName = (String)goodNames.nextElements()
	...
}

服务器对每一个不同的浏览器都会有着不同的会话作用域对象,Http服务器是如何和每一个不同的浏览器将HttpSession联系的呢?
Tomcat创建一个HttpSession对象时,会为这个HttpSession对象生成一个编号(例如:JSESSIONID = 110620),Tomcat会将编号保存在Cookie对象中,推送给当前服务器缓存中,用户第二次请求时,Tomcat会读取请求头中的JSESSIONID找到与之对应的HttpSession,若没有则创建新的HttpSession对象。

getSession()与getSession(false)的区别:
getSession():若服务器中没有对应的HttpSession对象,则创建一个新的对象。
getSession():若服务器中没有对应的HttpSession对象,则会返回null。

关于HttpSession对象的销毁时机:
用户与HttpSession关联的Cookie只能存在浏览器缓存中,即浏览器关闭Cookie对象也会销毁,浏览器与服务器中的HttpSession联系切断,但服务器无法检测到Cookie对象是否已经关闭,于是Tomat对每一个HttpSession对象设置了空闲时间,默认为30min,如果浏览器在30min内未访问HttpSession对象,服务器将会对HttpSession对象进行销毁。
我们也可以手动设置销毁时间,在web.xml文件中设置

<session-config>
	<session-timeout>5</session-timeout>
</session-config>

这里设置的是5min。

HttpServletRequest

两个Servlet共用一个HttpServletRequest对象时,可以进行数据共享。

一般使用请求转发时,两个Servlet才会共享一个HttpServletRequest对象。此时我们会将这个HttpServletRequest对象称为作用域对象。
HttpServletRequest对象中也封装了Attribute属性,我们可以通过该对象进行数据传输。
request.setAttribute("key1",属性);
request.getAttribute("key2",属性);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVAWEB 数据共享 的相关文章

  • JSP和JavaBean

    8 JSP 8 1 什么是JSP Java Servlet Pages java服务器端页面 也和Servlet一样 用于实现动态Web技术 最大特点 写JSP就像是写HTML 区别 HTML只给用户提供静态的数据 JSP页面中可以嵌入Ja
  • 实现serializable序列化接口

    1 什么是序列化和反序列化 Serialization 序列化 是一种将对象以一连串的字节描述的过程 反序列化deserialization是一种将这些字节重建成一个对象的过程 2 什么情况下需要序列化 a 当你想把的内存中的对象保存到一个
  • [羊城杯 2020]A Piece Of Java

    羊城杯 2020 A Piece Of Java 文章目录 羊城杯 2020 A Piece Of Java 源码分析 从后往前测试 逐步写exp 构造DatabaseInfo类对象 InfoInvocationHandler 动态代理 序
  • javaWeb数据库连接池,过滤器和监听器

    数据库连接池 JDBC 1 什么是数据库连接池 是一个数据库的工具 能够分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是再重新建立一个 常见数据库连接池 C3P0 是一个开放源代码的JDBC连接池 它在lib目
  • JavaScript(7)本地存储,函数深入理解

    1 本地存储 1 1本地存储特性 数据存储在用户浏览器中 设置和读取数据方便 而且页面刷新不丢失数据 容量较大 sessionStorage约5M localStorage约20M 只能存储字符串 可以将对象JSON stringify 编
  • Idea的 Cannot resolve method ‘getAttribute(java.lang.String)‘问题解决

    问题 写javaweb jsp时使用application getAttribute出现报错 Cannot resolve method getAttribute java lang String 解决方法 第一步 File gt Proj
  • 【html】【一个简单的用户登录页面代码】

    结果 代码
  • JavaWeb之HTML和CSS

    标签命令汇总 tr 行 td 单元格 b 加粗 font 字体标签 br 换行 a 超链接标签 ul 无序标签列表 ol 有序标签列表 li list ul 无序标签列表 href 设置链接地址 一 概述 1 B S软件结构 JavaSE中
  • 数据库设计DDL

    DDL 数据定义语言 用来定义数据库对象 数据库 表 DDL 数据库操作 查询 查询所有数据库 show databases 查询当前数据库 select database 使用 使用数据库 use 数据库名 创建 创建数据库 create
  • 关于split截取字符时,问号的特殊情况

    有一段字符 tring str gjjxxcx gjjxx cx jsp zgzh 1010024000019 如果使用如下代码 String strArray str split gjjxx cx jsp System out print
  • Redis概述与安装

    Redis简介 首先 简单了解一下NoSQL Not only sql 不要错误的理解为 没有SQL 而是不仅仅是SQL NoSQL工具也是一种简易的数据库 它主要是基于内存的数据库 并提供一定的持久化功能 现在有很多这种技术如 memca
  • 使用Aspect切面实现系统日志并存入数据库

    使用Aspect切面实现系统日志并存入数据库 1 pom xml中 加入Maven依赖
  • 互联网 API 接口幂等性设计

    WEB 资源或 API 方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用 幂等性是系统的接口对外一种承诺 而不是实现 承诺只要调用接口成功 外部多次调用对系统的影响是一致的 幂等性是分布式系统设计中的一个重要概念 对超时处理 系
  • Servlet3.0基础

    一 要求 1 MyEclipse10 0或以上版本 2 发布到Tomcat7 0或以上版本 二 步骤 1 创建javaEE6 0应用 三 概述 注解代替web xml配置文件 异步处理 对上传的支持 四 注解代替配置文件 1 删除web x
  • 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出

    使用 阿里巴巴的 EasyExcel 填充 excel模板导出 需要支持批量操作 即一个模板循环导出多份 在网上找了下其他大佬们的做法 没有找到想要的 很多都是要先生成excel文件 再压缩导出 但我不想这样做 想直接通过文件流的方式 直接
  • 解决Jenkins插件不能下载安装的问题

    安装到这一步 显示无法下载Jenkins插件 安装中升级站点 如果你还在安装过程中 遇见这个问题 你可以打开一个新的网页 输入网址http localhost 8080 pluginManager advanced 在最下面的升级站点 把其
  • form表单中使用fileUpLoad上传文件

    在最近的项目中 需要对用户的头像就行上传 这里了解到使用appche的 大家可自行到mvn库搜索jar包名进行下载 这里需要注意的是代码中对参数的读取 正常情况下我么使用getparameter方法进行读取表单数据 但是因为在form中我们
  • 【封装】实体类(entity)

    实体类entity 一 ORM 1 1 ORM 实体类 entity 零散数据的载体 1 1 1 ORM应用 一 ORM ORM Object Relational Mapping 从数据库查询到的结果集 ResultSet 在进行遍历时
  • 【JavaWeb】网络原理初识

    网络原理初识 计算机网络的历史 局域网和广域网 网络组件中的重要设备 网络通信基础 基本概念 协议分层 OSI七层模型 TCP IP五层 或四层 模型 封装和分用 发送方 接收方 三层转发和二层转发 计算机网络的历史 计算机最初是为了打仗而
  • JDBC基本概念

    什么是JDBC JDBC概念 JDBC Java DataBase Connectivity 是一套统一的基于Java语言的关系数据库编程接口规范 该规范允许将SQL语句作为参数通过JDBC接口发送给远端数据库 远端数据库接收到SQL语句后

随机推荐