servlet监听器

application:上下文对象,是由容器建立和初始化的,它的范围是整个的web应用,并且整个web应用中只会有一个 application对象存在,当web服务器关闭时,就会将application对象销毁

session:是一种保存上下文信息的机制,它是针对每一个会话的,它是放在服务器端,经过SessionId区分的,在浏览器和服务器结束后,都会将session销毁

request对象:是当客户端发送请求时,容器就会建立一个ServletRequest对象,来进行封装请求数据,同时会建立一个servletResponse对象来进行封装相应数据,当结束封装请求以后,就会销毁该对象 WEB监听器,就是监听这3个对象的建立,销毁,和它们的属性发生的变化
  • 什么是web监听器

 

  • Web监听器的用途:

1,统计在线人数和在线用户。 2,系统启动时加载初始化信息。 3,统计网站访问量。 4,跟Spring结合。java

 

监听器的用法

实现了ServletContextListener接口,建立一个监听源ServletContext的监听器,当服务器启动时,便会建立application对象并调用初始化方法.能够经过初始化方法的参数来对application对象作出一些操做.web

当服务器关闭,application对象销毁时,也会调用监听器的销毁方法,也能够经过参数来做出一些操做.初始化方法和销毁方法中的参数是ServletContextEvent的对象,所以能够经过参数来获取到application对象来对其操做(得到初始化参数).数据库

1.编写java程序浏览器

public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }
}

2.配置web.xml服务器

<listener>
    <listener-class>onetry.Listener.FirstListener<stener-class>
<stener>
  • 监听器的执行顺序

  • 监听器分类

1.按监听器的对象划分:
   a 用户监听应用程序环境对象(ServletContext)的事件监听器
   b 用于监听用户会话对象(HttpSession)的事件监听器
   c 用于监听请求消息对象(ServletRequest)的事件监听器。
2.按事件划分
   a 监听域对象自身的建立和销毁的事件监听器
   b 监听域对象中的属性的增长和删除的事件监听器
   c 监听绑定到HttpSession域中的某个对象的状态的事件监听器

ServletContext的建立和销毁
实现ServletContextListener接口用于监听它的建立和销毁事件
一个项目中能够有多个ServletContextListener,可是只有一个ServletContext对象

有两个事件处理方法:
(1)contextInitialized方法:
public void contextInitialized( ServletContextEvent sce )

参数 ServletContextEvent 事件对象,能够获取ServletContext对象以及一些初始化参数

例如:
获取ServletContext对象: 
ServletContext sc = sce.getServletContext();
获取初始化参数:
sc.getInitParmeter("参数名称");
初始化参数在web.xml中配置:
 <context-param>
   <param-name>initParam</param-name>
   <param-value>imooc</param-value>
 </context-param>
2.设置ServletContext属性:sc.setAttribute("name",obj);
而后在其它地方获取getAttribute("name")

(2)contextDestroyed方法:
public void contextDestroyed( ServletContextEvent sce )
ServletContext销毁时调用
主要用于数据库连接关闭时释放一些资源,以避免过分的占用。
  • HttpSession的事件监听器

HttpSession的建立和销毁
实现HttpSessionListener接口用于监听它的建立和销毁事件
一个HttpSession能够注册多个HttpSessionListener接口,
一个web应用中能够有多个HttpSession对象	
有两个事件处理方法:	
sessionCreated方法:
public void sessionCreated(HttpSessionEvent se)
session建立时调用
sessionDestroyed方法:
public void sessionDestroyed(HttpSessionEvent se)
session销毁时调用

HttpSessionListener的主要用途:
统计在线人数
记录访问日志,记录访问时间、访问的ip

/**
* 销毁session
* 1.关闭服务器
* 2.关闭浏览器
* 3.不关闭浏览器,session超时
*/

不关闭浏览器,session超时
能够在web.xml配置session超时的时间
<session-config>
<session-timeout>0<ssion-timeout>
<ssion-config>
0:没有超时的限制
1:超时1分钟后销毁,可是并非准确的一分钟
  • ServletRequest的事件监听器

实现ServletRequestListener接口用于监听它的建立和销毁事件
一个ServletRequest能够注册多个ServletRequestListener接口,
有两个事件处理方法:	
requestInitialized方法:
public void requestInitialized(ServletRequestEvent sre)
request建立时调用
参数ServletRequestEvent能够获取ServletRequest对象 ServletRequest sr = sre.getServletRequest()
进而获取初始化参数:sr.getInitParmeter("")
requestDestroyed方法:
public void requestDestroyed(ServletRequestEvent sre)
request销毁时调用	

ServletRequest的主要用途:
读取参数
记录访问历史

request监听的是用户的每个访问请求

Ps:别忘了监听器的web设置。

 

request.getAttribute()只能经过 request.setAttribute("name",参数)来获取;

request.getParameter()则经过URL参数,或前连接页面关系的参数来获取

 

  • 绑定到HttpSession域中的对象状态的事件监听器

监听器的分类-按监听事件划分:
一、监听器绑定到HttpSession域中的某个对象的状态事件监听器;
二、HttpSession中的对象状态:
(1)绑定:经过setAttribute();
(2)解除绑定:removeAttribute();
(3)钝化:将session对象序列化到存储设备上
(4)活化:将session对象从存储设备上进行恢复
三、session钝化机制:
(1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。
(2)session的钝化机制由SessionManager管理
四、实现绑定和解除绑定,建立一个【普通的javabean】绑定和解除绑定需实现【HttpSessionBindingListener】接口;
实现钝化和活化,需实现HttpSessionActivationListener接口和Serializable接口
  • web3.0以后使用注解实现监听器

相关文章
相关标签/搜索