文档章节

java servlet拾遗(6)-监听器

haoran_10
 haoran_10
发布于 2016/07/15 16:39
字数 757
阅读 9
收藏 1

在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为  ServletContext ,  HttpSession    ServletRequest  这三个域对象。

 

一、监ServletContext的事件

(1)、ServletContextListener

        监听的事件源是ServletContextEvent,ServletContextListener是"生命周期监听器",如果想要知道何时Web应用程序已经初始化或即将结束销毁,可以实现ServletContextListener:

package javax.servlet;  
import java.util.EventListener;  
public interface ServletContextListener extends EventListener {  
    public void contextInitialized(ServletContextEvent sce);   //web应用启动初始化时调用,比如数据库的连接等,
    public void contextDestroyed(ServletContextEvent sce); //web应用结束销毁前调用,用来做资源的释放,比如释放数据库的连接
}

 

 

而传入的事件中包含ServletContext,通过ServletContextEvent event.getServletContext()获取

例如:

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
 
@WebListener()  
public class MyContextListener implements ServletContextListener {  
    @Override  
    public void contextInitialized(ServletContextEvent sce) {  
        ServletContext servletContext = sce.getServletContext();  
        //对servletContext做初始化处理
    }
    @Override  
    public void contextDestroyed(ServletContextEvent sce) {
     
    }  
}

 

(2)、ServletContextAttributeListener

 

监听的事件源是ServletContextEvent

ServletContextAttributeListener是"监听属性改变的监听器",如果想要对象被设置、移除或替换ServletContext属性,可以收到通知以进行一些操作,则可以实现ServletContextAttributeListener。

package javax.servlet;  
import java.util.EventListener;  
public interface ServletContextAttributeListener extends EventListener{  
    public void attributeAdded(ServletContextAttributeEvent scab);  
    public void attributeRemoved(ServletContextAttributeEvent scab);  
    public void attributeReplaced(ServletContextAttributeEvent scab);  
}

 

当在ServletContext中添加属性、移除属性或替换属性时,相对应的attributeAdded()、attributeRemoved()与attributeReplaced()方法就会被调用。

如果希望容器在部署应用程序时,实例化实现ServletContextAttributeListener的类并注册给应用程序,同样也是在实现类上标注@WebListener(其他事件也是加上此注解,并实现相应的接口即可),并实现ServletContextAttributeListener接口,也可以配置在web.xml中

 

 

二、监听HttpSession的事件 

 

(1)、HttpSessionListener

HttpSessionListener是"会话生命周期监听器",如果想要在HttpSession对象创建或结束时,做些相对应动作,则可以实现HttpSessionListener。

 

(2)、HttpSessionAttributeListener

HttpSessionAttributeListener是"会话属性改变监听器",当在会话对象中加入属性、移除属性或替换属性时,相对应的attributeAdded()、attributeRemoved()与attributeReplaced()方法就会被调用,并分别传入HttpSessionBindingEvent。

 

(3)、HttpSessionBindingListener

HttpSessionBindingListener是"会话对象绑定监听器",如果有个即将加入HttpSession的属性对象,希望在设置给HttpSession成为属性或从HttpSession中移除时,可以收到HttpSession的通知,则可以让该对象实现HttpSessionBindingListener接口。

 

(4)、HttpSessionActivationListener

八辈子用不到。。。


 

三、监听ServletRequest 的事件

(1)、ServletRequestListener

ServletRequestListener是"请求生命周期监听器",如果想要在HttpServletRequest对象生成或结束时做些相对应的操作,则可以实现ServletRequestListener。如果做为servletRequest对象的修改。

 

(2)、ServletRequestAttributeListener

ServletRequestAttributeListener是"属性改变监听器",在请求对象中加入属性、移除属性或替换属性时,相对应的attributeAdded()、attributeRemoved()与attributeReplaced()方法就会被调用,并分别传入ServletRequestAttributeEvent。

ServletRequestAttributeEvent有个getName()方法,可以取得属性设置或移除时指定的名称,而getValue()则可以取得属性设置或移除时的对象。

 

 

(3)、AsyncListener

这个略叼。下个篇幅在完善吧。

 

© 著作权归作者所有

共有 人打赏支持
haoran_10
粉丝 25
博文 88
码字总数 80846
作品 0
杭州
程序员
如何成为一个优秀的JSP程序员

一个普通的错误是把JSP当作简化的Java,它不是,(事实上, JSP是简化的Servlet)程序员通常试着没有学习要求的支持技巧而直接学习JSP。JSP是一个衔接技术,并且成功地连接你需要理解的另外的...

五味格子
2011/05/11
0
0
如何成为一个优秀的JSP程序员

一个普通的错误是把JSP当作简化的Java,它不是,(事实上, JSP是简化的Servlet)程序员通常试着没有学习要求的支持技巧而直接学习JSP。JSP是一个衔接技术,并且成功地连接你需要理解的另外的...

五味格子
2011/05/11
0
0
9.java web的发展 javaweb是什么 J2EE发展历史 规范 J2EE是什么 发展背景 组件标准 J2EE好处作用 Servlet 含义 本质 发展 java在web中的发展 servlet工作流程 java 开发web项目发展 javaBean jsp

javaweb 本质上来说就是使用java 语言来解决企业web应用中一系列技术体系与规范; jdk1.2 playground 此版本中把java技术体系拆分为三个方向 J2SE J2EE J2ME 这个大家都知道 其中之一的J2EE,...

noteless
06/29
0
0
【科普】JavaEE的核心技术

java的大方向就是JavaEE,JavaEE不仅仅是socket编程,具体包括13种核心技术。 JAVAEE的核心API与组件 JAVAEE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于W...

花的鱼
06/26
0
0
Spring 和 JavaEE的关系

Java EE vs Spring. Or: What is a standard? 什么是JavaEE J2EE是一系列技术标准所组成的平台。JavaEE包含了对一系列标准(接口)的实现。如果你要用这些接口,恐怕要使用JavaEE服务器而不仅...

Finley.Hamilton
2014/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部