(转)JavaWeb开发——Servlet监听器

一、Servlet监听器的概念

Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。

监听对象:

1、ServletContext:application,整个应用只存在一个

2、HttpSession:session,针对每一个对话

3、ServletRequest:request,针对每一个客户请求

监听内容:创建、销毁、属性改变事件

监听作用:可以在事件发生前、发生后进行一些处理,一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。

二、监听器的基本使用

创建步骤:

1、创建一个实现监听器接口的类

2、配置web.xml文件,注册监听器

<listener>
    <listener-class>完整类名</listener-class>
</listener>

监听器的启动顺序:按照web.xml的配置顺序来启动

加载顺序:监听器>过滤器>Servlet

三、监听器的分类

3.1 按照监听的对象划分

1、用于监听应用程序环境对象(ServletContext)的事件监听器,实现ServletContextListener、ServletContextAttributeListener接口

2、用于监听用户会话对象(HttpSeesion)的事件监听器,实现HttpSessionListener、HttpSessionAttributeListener接口

3、用于监听请求消息对象(ServletRequest)的事件监听器,实现ServletRequestListener、ServletRequestAttributeListener接口

3.2按照监听事件划分

1、监听域对象自身的创建和销毁的事件监听器

根据监听对象不同分别实现ServletContextListener、HttpSessionListener、ServletRequestListener接口。

①ServletContext的创建和销毁:contextInitialized方法和contextDestroyed方法

public void contextInitialized(ServletContextEvent sce)//ServletContext创建时调用
public void contextDestroyed(ServletContextEvent sce)//ServletContext销毁时调用

主要用途:作为定时器、加载全局属性对象、创建全局数据库连接、加载缓存信息等

实例:

在web.xml中可以配置项目初始化信息,在contextInitialized方法中进行启动

<context-param>
    <param-name>属性名</param-name>
    <param-value>属性值</param-value>
</context-param>

自定义监听器

public class MyFirstListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent sce){
        //获取web.xml中配置的属性
        String value=sce.getServletContext().getInitParameter("属性名");
        System.out.println(value);
  }
    public void contextDestroyed(ServletContextEvent sce){
        //关闭时操作
  }
}

②HttpSession的创建和销毁:sessionCreated和sessionDestroyed方法

public void sessionCreated(HttpSessionEvent se)//session创建时调用
public void sessionDestroyed(HttpSessionEvent se)//session销毁时调用

主要用途:统计在线人数、记录访问日志等

【注】

web.xml配置session超时参数,单位:分,session超时的时间并不是精确的

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

③ServletRequest的创建和销毁:requestInitialized和requestDestroyed方法

public void requestInitialized(ServletRequestEvent sre)//request创建时调用
public void requestDestroyed(ServletRequestEvent sre)//request销毁时调用

主要用途:读取request参数,记录访问历史

实例:

public class MySRequestListener implements SevletRequestListener{
    public void requestInitialized(ServletRequestEvent sre){
        String value=sre.getServletRequest().getParameter("key");//获取request中的参数
        System.out.println(value);
    }
    public void requestDestroyed(ServletRequestEvent sre){
        System.out.println("request destroyed");
    }
}   

2、监听域对象中的属性的增加和删除的事件监听器

  根据监听对象不同分别实现ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener接口。

  实现方法:attributeAdded、attributeRemoved、attributeReplaced

3、监听绑定到HttpSeesion域中的某个对象的状态的事件监听器(创建普通JavaBean)

  HttpSession中的对象状态:绑定→解除绑定;钝化→活化

  实现接口及方法:HttpSessionBindingListener接口(valueBound和valueUnbound方法)、HttpSessionActivationListener接口(sessionWillPassivate和sessionDidActivate方法)

【注1】①要实现钝化和活化必须实现Serializable接口

②不需要在web.xml中注册

【注2】

  绑定:    通过setAttribute保存到session对象当中

  解除绑定:  通过removeAttribue去除

  钝化:    将session对象持久化到存储设备上

  活化:    将session对象从存储设备上进行恢复

  session钝化机制:

    ①把服务器不常使用的session对象暂时序列化到系统文件或者是数据库中,当使用时反序列化到内存中,整个过程由服务器自动完成;

    ②session的钝化机制由SessionManager管理,创建一个普通的JavaBean绑定和接触需要实现HttpSessionBindingListener接口

四、Servlet3.0下监听器的使用

4.1 使用条件

  1、使用servlet3.0新标准的jar包

  2、JDK在1.6以上版本

  3、编译器的编译级别为6.0

  4、在web.xml文件中,使用3.0规范

  5、使用支持servlet3.0特性的web容器,比如tomcat7

4.2 servlet3.0下监听器的用法

使用注解 @WebListener 即可,无法去定义监听器的顺序

@WebListener的常用属性
属性名 类型 是否可选 描述
value String 该监听器的描述信息
@WebListener("This is a listener")
public class FirstListener impliements ServletRequestListener{}

该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:

  ServletContextListener

  ServletContextAttributeListener

  ServletRequestListener

  ServletRequestAttributeListener

  HttpSessionListener

  HttpSessionAttributeListener

参考资料:慕课网【JAVA Web开发技术应用——监听器】http://www.imooc.com/learn/271

时间: 2024-12-14 18:50:00

(转)JavaWeb开发——Servlet监听器的相关文章

JavaWeb开发——servlet监听器 listener

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件, 以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改

Java Web开发——Servlet监听器

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改变

Servlet监听器(转)

Java Web开发--Servlet监听器 一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对

Javaweb之 servlet 开发详解1

1.1  Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 编写一个Java程序,向浏览器输出"hello servlet". 编写这个程序需要解决的2个问题: 在Java程序中,如何才能向IE浏

javaweb(五)——Servlet开发(一)

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.Servlet的运行过程 Servlet程序是由WEB

深入分析JavaWeb Item5 -- Servlet开发

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.Servlet的运行过程 Servlet程序是由WEB

Javaweb之 servlet 开发具体解释1

1.1  Tip:Servlet简单介绍 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),须要完毕下面2个步骤: 1.编写一个Java类.实现servlet接口. 2.把开发好的Java类部署到webserver中. 编写一个Java程序,向浏览器输出"hello servlet". 编写这个程序须要解决的2个问题: 在Java程序中,怎样才

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

JavaWeb开发环境配置

JavaWeb开发环境配置(win7_64bit) 目录 1.概述 2.JavaWeb学习路线 3.JavaWeb常用开发环境搭建 4.注意事项 >>看不清的图片可在新标签打开查看大图 1.概述 说起JavaWeb,就想到另一个词:JavaEE.很多时候,这两个词是混用的,两者的概念并不能精确描述,这里,我尝试做一下区分... JavaEE:全称Java平台企业版(Java Platform Enterprise Edition),是Sun公司为企业级应用推出的标准平台.JavaEE是个大杂烩