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

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

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

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

java中如何定义共享数据 javaweb共享数据_服务器

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

java中如何定义共享数据 javaweb共享数据_java中如何定义共享数据_02


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",属性);