在 JavaWeb 中实现数据共享往往是通过定义属性的方法来实现,类似于Hashmap中的键值对,有属性名和属性值作为设置属性方法的参数,而在其他的地方通过属性名去获取属性的值。定义不同级别的值,数据共享的范围也是有区别的,主要有以下三种级别:application(应用级)、session(会话级)、request(请求级)。
application(应用级):
- 生效时间:服务器启动至服务器停止;
- 作用域:在所有应用程序中有效;
- 实现接口:ServletContext;
应用级所作用的范围是最大的,它利用到的类是ServletContext,在一个web被创建时,会自动初始化一个ServletContext对象,包含方法如下:
- ServletContext getServletContext() 获取ServletContext对象;
- Object getAttribute(String name) 从application中获取属性值;
- void setAttribute(String name, Object value) 向application作用域中设置属性;
- void removeAttribute(String name) 移除application作用域中的某属性。
session(会话级):
- 生效时间:HTTP会话开始至会话结束;
- 作用域:在当前会话中有效;
- 实现接口:HttpSession;
会话级作用的范围仅此于应用级,那么什么是会话级呢?所谓的会话级,就是创建一个页面后执行的跳转、重定向、整合等都可以是一个会话,只要你不关闭浏览器页面,就是一次会话。 它通过HttpSession类来实现一次会话中的数据共享,类似于ServletContext,包含方法如下:
- Servlet中得到session对象:HttpSession session = request.getSession();
- Jsp中得到session对象:session是jsp内置对象之一,不用创建就可以直接使用;
- void setAttribute(String name, Object value);
- Object getAttribute(String name);
- void removeAttribute(String name);
request(请求级):
- 生效时间:HTTP请求开始到结束这段时间;
- 作用域:在当前请求中有效;
- 实现接口:HttpServletRequest ;
请求级作用的范围是最小的,它仅作用于一次请求,也就是说客户端向服务器发送一次请求的过程中,这也就意味着重定向是无法访问到request(请求级)的属性的。方法:
- void setAttribute(String name, Object value);
- Object getAttribute(String name);
- void removeAttribute(String name);
doGet()、doPost() 函数的第一个参数就是 HttpServletRequest 对象, 使用这个对象的 setAttribute 即可传递信息。
设置好信息之后,要用到 RequestDispatcher 接口的 forward 方法,将请求转发给其他Servlet。
要想在一次请求中获取请求级属性值,同时还想到另一个Servlet只能选择跳转
RequestDispatcher rd = request.getRequestDispatcher("RS2");
rd.forward(request, response);
rd.include(request, response);
网友评论