Servlet四种数据共享方案

一、ServletContext接口
全局作用域对象。
1、工作原理:每一个网站都存在一个全局作用域对象,这个对象相当于一个Map,将一个Servlet中的数据存入该对象,当前网站中其他的Servlet都可以从该对象中的得到数据并使用。
2、生命周期:贯穿于整个网站运行期间。

//存放
	ServletContext application=request.getServletContext();
	application.setAttribute("key","共享数据");
//获取
	ServletContext application=request.getServletContext();
	Object data=application.getAttribute("key");

二、cookie类
1、工作原理:用户通过浏览器向myweb网站发送请求申请OneServlet,OneServlet在运行期间创建了一个cookie存储当前用户相关数据。OneServlet工作完毕后,将cookie写入到响应头交还给浏览器,浏览器收到响应包之后,将cookie存在浏览器的缓存中。
用户通过同一个浏览器再次向myweb网站发送请求申请TwoServlet时,浏览器需要无条件的将myweb网站之前推送过来的cookie写入到请求头发送过去。
2、前提:两个Servlet来自于同一个网站并且为同一个浏览器/用户提供服务。
3、生命周期:默认情况下,浏览器关闭则销毁。但可以手动设置,要求浏览器将接受的cookie存放在客户端计算机的硬盘上,同时需要指定cookie在硬盘上的存活时间:cookie.setMaxAge(秒)
4、注意:一个cookie只能存放一个键值对,键和值的类型都只能是String,键不能是中文。

//存放
	Cookie card1=new Cookie("key","共享数据1");
	Cookie card2=new Cookie("key","共享数据2");
	response.addCookie(card1);
	response.addCookie(card2);
//获取
	Cookie[] cookies=request.getCookies();
	for(Cookie cookie:cookies){
		System.out.println(cookie.getName());
		System.out.println(cookie.getValue());
	}

三、HttpSession接口
会话作用域对象。
1、工作原理:Tomcat在创建一个HttpSession对象时自动为这个HttpSession对象生成一个编号(箱号)。Tomcat将箱号保存到cookie对象中,推送到当前浏览器缓存。格式为cookie:JSESSIONID=箱号。等到用户第二次访问,Tomcat根据请求头JSESSIONID确认用户是否有HttpSession以及哪一个HttpSession是当前用户。
2、前提:两个Servlet来自于同一个网站并且为同一个浏览器/用户提供服务。且不能禁用cookie,因为session是借助于cookie实现数据共享的。
3、生命周期:
1)cookie是用户与session的关联,浏览器关闭则cookie销毁,也就是用户与session的关联断开。但Tomcat无法检测浏览器是否关闭,因此浏览器关闭时session并不会销毁。
2)了解决这个问题,Tomcat为session对象设置了空闲时间,默认为30分钟,超过30分钟session将被销毁。另外,可以在web.xml文件中自定义session空闲时间。

//存放
	HttpSession session=request.getSession();
	session.setAttribute("key","共享数据");
//获取
	HttpSession session=request.getSession();
	Object data=session.getAttribute("key");

四、HttpServletRequest接口
请求作用域对象。
1、工作原理:在同一个网站中,如果两个Servlet通过请求转发方式进行调用,彼此之间共享一个请求协议包,而一个请求协议包共享一个请求对象,此时可利用请求对象进行数据共享。
2、前提:Servlet共享同一个请求协议包(请求对象)。

//存放
	request.setAttribute("key","共享数据");
	request.getRequestDispatcher("/two").forward(request,response);
//获取 此处为别名/two的servlet
	Object data=request.getAttribute("key");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章