作用域对象
Web应用程序状态管理:
概述:
1 HTTP协议使用的是无状态的连接
2 对容器而言,每一个请求都来自于一个新的客户
(1)表单隐藏字段:
<input type=”hidden” name=”session” value=”...”>
不足:只有当每个页面生成动态的时候才会有效;
(2)Cookie:
原理:服务器在响应请求时将一些数据以“键-值”对的形式通过响应信息保存在客户端
//获取请求信息中Cookie数据:
Cookie [] Cookies= request.getCookies();
//创建Cookie对象:
Cookie cookie=new Cookie(“cool”,”tiger!”);
//设置生命周期以秒为单位:
cookie.MaxAge(20);
//添加Cookie在响应头,发送给客户端
response.addCookie(cookie);
(3)Session会话跟踪:
原理:
1服务器可以为客户端创建并维护一个Session对象,用于存放数据。
2在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID
3服务器以Cookie的方式将SessionID存放在客户端。
4当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问
*Session对象的正常使用要依赖于Cookie
//获取HttpSession对象:
HttpSession session=request.getSession;
//设置session对象的最长不活动间隔
Session.setMaxInactiveInterval(30);
//获取session的数据
List list =(list) session.getAttribute(“list”);
//向session中添加数据
Session.setAttribute(“list”.list);
//让对象失效
Session.Invalidate();
销毁会话可以采用如下三种简单的方式
– 设置会话超时。
– 在Session对象上调用invalidate()方法。
– 应用结束(崩溃或取消部署)
浏览器关闭不意味着Session被删除。
(4)URL重写:当用户禁用了Cookie,可以使用代替。
URL重写方法:
response.encodeURL()
response.encodeRedirectURL(“/lovobook/sucess.html” )
对象作用域与Servlet事件监听器:
对象作用域
作用域对象 |
属性操作方法 |
作用域范围说明 |
ServletContext(上下文) |
void setAttribute(String, Object) Object getAttribute(Sting) void removeAttribute(String) Enumeration getAttributeNames()
|
整个Web应用程序 |
HttpSession(会话) |
一个会话交互过程
|
|
ServletRequest(请求) |
一次请求过程 |
1.ServletContext(上下文)
设置在ServletContext对象中的属性可以被Web应用中的任何一部分来访问
上下文作用域设置的属性在整个Web应用中被共享,只要服务器不被关闭,Web应用中的任何部分都能访问该属性,所以是线程不安全的。
2.HttpSession(会话)
Session用于维护与一个客户的会话状态。对于同一个客户的多个请求,Session会跨这些请求持久存储
一般来说是安全的,但是存在多个线程访问相同的会话属性,所以线程也是不安全的,比如,同一个浏览器不同的标签。
3. ServletRequest(请求)
系统的资源消耗
属性可以保存在请求作用域范围中
请求结束后。对象就会被垃圾回收。
监听器概述:
1.监听session,request,application这三个对象里存取数据的变化
2. 监听器对象可以在事情发生前、发生后可以做一些必要的处理
3.Servlet监听器主要目的是给Web应用增加事件处理机制,以便更好地监视和控制Web应用的状态变化
监听器分类:
监听Web应用程序范围内的事件:
Web应用启动和销毁事件
Web应用程序的属性发生改变的事件(包括增加、删除、修改)。
定义了ServletContextListener和ServletContextAttributeListener两个接口
监听会话范围内的事件:
管理从同一个客户端或用户向一个Web应用程序发出的一系列请求相关的状态或资源
HttpSessionBindingListener接口 是唯一不需要在Web.xml中设定的Listener.
HttpSessionAttributeListener接口
HttpSessionListener接口
HttpSessionActivationListener接口
监听请求生命周期内事件:
请求作用域范围内的生命周期事件用于管理整个request生命周期的状态和资源
ServletRequestListener接口
– public void requestDestroyed(ServletRequestEvent sre):当请求被销毁时被处理。
– public void requestInitialized(ServletRequestEvent sre):当请求被创建时被处理
ServletRequestAttributeListener接口
– public void attributeAdded(ServletRequestAttributeEvent arg0) :当在请求作用域中添加一个属性的时候调用该方法。
– public void attributeRemoved(ServletRequestAttributeEvent arg0) :当在请求作用域中删除一个属性时调用
– public void attributeReplaced(ServletRequestAttributeEvent arg0) :当在请求作用域中替换一个属性值的时候调用