Servlet监听器

前记:现在还处于自己在摸索javaweb的过程,学习着一些基础知识,希望能赶快走过这一阶段。

Servlet Listener:作用? 开发与部署?

最近在看shiro的web集成时有如下的部署

  <context-param>
    <param-name>shiroEnvironmentClass</param-name>
    <param-value>org.apache.shiro.web.env.IniWebEnvironment</param-value>
  </context-param>
  <context-param>
    <param-name>shiroConfigLocations</param-name>
    <param-value>classpath:shiro.ini</param-value>
  </context-param>
  
  <listener>
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
  </listener>

所以趁着此处的使用系统学习一下servlet listener基础

之前写安卓代码的时候经常也会遇到listener,当某某事A发生的时候(比如点击事件发生),就触发某某事B的执行。

在开发web时,我们或许想要在web应用程序启动或关闭时执行一些任务(比如数据库连接的建立和释放),或想要监控Session的创建与销毁,再如希望在ServletContext、HttpSession以及ServletRequest对象中的属性发生改变时得到通知,这些都可以通过监听器listener实现。


Servlet API提供了8个监听器接口,用于监听ServletContext、HttpSession和ServletRequest对象的生命周期事件,以及这些对象的属性改变事件。

这里着重介绍两个:ServletContextListener和HttpSessionBindingListener

1.javax.servlet.ServletContextListener


contextInitialized(ServletContextEvent sce)是当web应用程序初始化进程正开始时,Web容器调用这个方法,该方法将在所有的过滤器和Servlet初始化之前被调用

contextDestroyed(ServletContextEvent sce)是当Servlet上下文将要被关闭时,Web容器调用这个方法。该方法在所有的Servlet和过滤器销毁后被调用。

其中的参数ServletContextEvent:


再比如Shiro框架中的org.apache.shiro.web.env.EnvironmentLoaderListener

package org.apache.shiro.web.env;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.shiro.web.env.EnvironmentLoader;

public class EnvironmentLoaderListener extends EnvironmentLoader implements ServletContextListener {
    public EnvironmentLoaderListener() {
    }

    public void contextInitialized(ServletContextEvent sce) {
        this.initEnvironment(sce.getServletContext());
    }

    public void contextDestroyed(ServletContextEvent sce) {
        this.destroyEnvironment(sce.getServletContext());
    }
}
其中EnvironmentLoader类中有InitEnvironment()方法会创建WebEnvironment,并自动绑定到ServletContext。在web程序初始化时,就会去创建WebEnvironment。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值