新博客地址:https://my.oschina.net/hebaodan/blog/

记录学习过程的点滴,want to be大牛……

Servlet监听器listener

Servlet监听器listener

监听器的定义

用于在监听对象事件的发生前、发生后等情况时进行操作处理。

监听器类型

在Java Web中,监听的事件源为ServletContext、HttpSession、ServletRequest 3大对象。其中ServletContext和HttpSession对象在应用启动时创建,只有一个实例;ServletRequest,每次有请求过来时创建,请求结束后销毁。
按照监听对象分类:
- ServletContextListener 监听应用启动和关闭
- HttpSessionListener 监听会话产生和销毁
- ServletRequestListener 监听每个请求初始化&结束
按照监听事件分类
- ServletContextAttributeListener
- HttpSessionAttributeListener
- ServletRequestAttributeListener
用于监听对象中属性的增加、删除等事件,当调用相应对象的setAttribute()、removeAttribute()方法设置属性时,监听器可进行捕获。

当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由 ServletContextListener 来处理。

代码示例

创建web工程
在src下添加类

package com.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * Created by chenxin on 16/5/31.
 */
public class TestListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("此处完成一些初始化工作");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("此处完成一些销毁结束工作");
    }
}

在web.xml中注册监听器

 <listener>
        <listener-class>com.listener.TestListener</listener-class>
    </listener>

部署在Tomcat下,启动后再stop,可以看到控制台输出如下:
这里写图片描述
如图,打印出了在启动和关闭事件时的处理内容。

使用Spring时,在web.xml中注册ContextLoaderListener,作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

listener、filter、servlet的加载顺序

顺序依次为:
ServletContext(ContextParam) -> listener -> filter -> servlet
对于servlet,2节点不存在情况下,servlet被请求时才被初始化.
所以, context-param 配置节点并不是一定要写在 listener 配置节前。

当然,对于某一类节点来说,加载顺序与它们在 web.xml 文件中的先后顺序有关。

以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。
servlet 同 filter 类似,此处不再赘述。

所以,同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cx520forever/article/details/51544669
文章标签: servlet java web
个人分类: JavaWeb
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Servlet监听器listener

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭