JAVAWEB 数据共享

数据共享: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",属性);

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值