作用域对象

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) :当在请求作用域中替换一个属性值的时候调用

原文地址:https://www.cnblogs.com/syl1104/p/3802297.html