`

Servlet中listener(监听器)和filter的总结

    博客分类:
  • java
阅读更多

转:http://ruowu.iteye.com/blog/661922

转:http://javazheng.iteye.com/blog/819231

Listener我是这样理解他的,他是一种观察者模式的实现:我们在web.xml中配置listener的时候就是把一个被观察者放入的观察者的观察对象队列中,当被观察者触发了注册事件时观察者作出相应的反应。在jsp/servlet中具体的实现是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。

 

总体上说servlet中有主要有3类事件既:Servlet上下文事件、会话事件与请求事件总共有8listener(部分类容转载于http://ritaleo.iteye.com/blog/48751)接口,我们在web.xml中注册时对应上自己对相应接口的实现类即可:

Servlet中的ListenerEvent:

1.         JSP 2.0/Servlet 2.4中,共有八个Listener接口,六个Event类别。 
ServletContextListener
接口 
[
接口方法] contextInitialized() contextDestroyed() 
[
接收事件] ServletContextEvent 
[
触发场景Container加载Web应用程序时(例如启动 Container之后),会呼叫contextInitialized(),而当容器移除Web应用程序时,会呼叫contextDestroyed ()方法。

2.         ServletContextAttributeListener 
[
接口方法] attributeAdded() attributeReplaced()attributeRemoved() 
[
接收事件] ServletContextAttributeEvent 
[
触发场景若有对象加入为applicationServletContext)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()attributeRemoved()

3.         HttpSessionListener 
[
接口方法] sessionCreated()sessionDestroyed () 
[
接收事件] HttpSessionEvent 
[
触发场景session HttpSession)对象建立或被消灭时,会分别呼叫这两个方法。

4.         HttpSessionAttributeListener 
[
接口方法] attributeAdded() attributeReplaced()attributeRemoved() 
[
接收事件] HttpSessionBindingEvent 
[
触发场景若有对象加入为sessionHttpSession)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced() attributeRemoved()

5.         HttpSessionActivationListener 
[
接口方法] sessionDidActivate() sessionWillPassivate() 
[
接收事件] HttpSessionEvent 
[
触发场景] ActivatePassivate是用于置换对象的动作,当session对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透 过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以容 易理解的,sessionDidActivate() sessionWillPassivate()分别于Activeate后与将Passivate前呼叫。

6.         ServletRequestListener 
[
接口方法] requestInitialized() requestDestroyed() 
[
接收事件] RequestEvent 
[
触发场景requestHttpServletRequest)对象建立或被消灭时,会分别呼叫这两个方法。

7.         ServletRequestAttributeListener 
[
接口方法] attributeAdded() attributeReplaced()attributeRemoved() 
[
接收事件] HttpSessionBindingEvent 
[
触发场景若有对象加入为requestHttpServletRequest)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced() attributeRemoved()

8.         HttpSessionBindingListener 
[
接口方法] valueBound()valueUnbound() 
[
接收事件] HttpSessionBindingEvent 
[
触发场景实现HttpSessionBindingListener接口的类别,其实例如果被加入至sessionHttpSession)对象的属性中,则会 呼叫valueBound(),如果被从sessionHttpSession)对象的属性中移除,则会呼叫valueUnbound(),实现HttpSessionBindingListener接口的类别不需在web.xml中设定。

 

具体使用方法:在web.xml中添加如下语句:

listener >  
listener-class > com.servlet.listener.YouAchieveListener  < \listener-class >

< \listener >

其中YouAchieveListener  为你实现的某个Listener接口的实现类com.servlet.listener.为你的包名。

 

FilterFilter 技术是servlet 2.3 新增加的功能.(以下部分类容转载于http://www.programfan.com/article/1836.html

Filter的使用户可以改变一 request或修改一个response Filter 不是一个servlet,它不能产生一个response,但是他能够在一个request到达servlet之前预先处理request,也可以在一个响应离开 servlet时处理response

一个filter 包括:
1. 
servlet被调用之前截获
2. 
servlet被调用之前检查servlet request; 
3. 
根据需要修改request头和request数据
4. 
根据需要修改response头和response数据
5. 
servlet被调用之后截获.

Filterservlet的对应关系为多对多的关系 ,也就是说你可以配置一个filter 到一个或多个servlet;而一个servlet可以有多个filter。几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter
一个filter必须实现javax.servlet.Filter接口并定义三个方法
1.void setFilterConfig(FilterConfig config) //
设置filter 的配置对象
2. FilterConfig getFilterConfig() //
返回filter的配置对象
3. void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) //
执行filter 的工作.

服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置 FilterConfig为空来指明filter已经终结
每一个filterdoFilter()方法中得到当前的requestresponse.在这个方法里,可以进行任何的针对request response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个 filterdoFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下 一个filter. 
一个filter可以包装request response以改变几个方法和提供用户定制的属性.Api2.3提供了HttpServletRequestWrapperHttpServletResponseWrapper来实现.它们能分派最初的requestresponse.如果要改变一个方法的特性,必须继 wapper和重写方法.下面是一段简单的日志filter用来记录所有request的持续时间
public class LogFilter implements Filter { 
FilterConfig config; 

public void setFilterConfig(FilterConfig config) { 
this.config = config; 


public FilterConfig getFilterConfig() { 
return config; 


public void doFilter(ServletRequest req, 
ServletResponse res, 
FilterChain chain) { 
ServletContext context = getFilterConfig().getServletContext(); 
long bef = System.currentTimeMillis(); 
chain.doFilter(req, res); // no chain parameter needed here 
long aft = System.currentTimeMillis(); 
context.log("Request to " + req.getRequestURI() 
+ ": " + (aft-bef)); 


server调用setFilterConfig(),filter保存config信息.doFilter()方法中通过config信息得到 servletContext.如果要运行这个filter,必须去配置到web.xml.tomcat4.01为例
<filter> 
<filter-name> 
log //filter 
名字 
</filter-name> 
<filter-class> 
LogFilter //filter class(
上例的servlet) 
</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>log</filter-name> 
<servletname>servletname</servlet-name> 
</filter-mapping> 
<servlet> 
<servlet-name>servletname</servletname> 
<servletclass>servletclass</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>servletname</servlet-name> 
<url-pattern>*</url-pattern> 
</servlet-mapping>

从上面的事例中可以看出,filterservlet是在web.xml中配置起来的。

/////////////////////////

1.Listener项目上下文是从event中获取的。Listener通过event与容器发生关系。 

Java代码  收藏代码
  1. public interface ServletContextListener extends EventListener{  
  2.   
  3. public void contextInitialized ( ServletContextEvent sce );  
  4.   
  5. ServletContext servletContext;  
  6.   
  7. public void contextInitialized(ServletContextEvent sce)  
  8. {  
  9. servletContext = sce.getServletContext();  
  10. }  
  11. }  


2. Filter项目的上下文是是从FilterConfig中获取的。Filter通过FilterConfig与容器发生关系 
servletContext=filterConfig.getServletContext(),需要传入filterConfig参数。 

3.Servlet项目的上下文是从ServletConfig中获取的,Servlet通过ServltConfig与容器发生关系。

分享到:
评论
1 楼 achersnake 2012-05-10  
123

相关推荐

    Filter过滤器和Listener监听器详解

    Filter过滤器和Listener监听器详解 Filter过滤器 Filter的简介 对资源的访问进行过滤,相当于小区的保安,进去要检查,出去还要检查。 Filter的使用 编写一个类,继承并实现javax.servlet.Filter。 package ...

    第7章 过滤器Filter和监听器Listener.ppt

    Java Web基础与实例教程的PPT,自己制作的PPT,将近400页,免费分享,童鞋们努力学习吧。

    Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法

    给大家介绍了spring-boot中如何定义过滤器、监听器和拦截器,对Spring Boot 编写Servlet、Filter、Listener、Interceptor的相关知识感兴趣的朋友一起看看吧

    Servlet概述和入门.pdf

    1、Servlet 是 JavaEE的...JavaWeb 三大组件分别是:**Servlet 程序、Filter 过滤器、Listener 监听器**。 3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应 数据给客户端。

    你真的了解Filter过滤器 ?

    1.Filter 什么是过滤器 其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet... JavaWeb的三大组件分别是:Servlet程序 Listener监听器 Filter过滤器. Filter过滤器是一

    基于Servlet的在线蛋糕店管理系统

    项目简介 本项目是基于J2EE的Servlet的在线蛋糕店管理系统,本项目有三种权限:游客、用户、管理员。 ...用户:浏览查看商品、...后端:Servlet、过滤器filter、监听器Listener、jdbc 前端:Jsp、Jquery、Ajax、bootstrap

    Web应用与开发作业

    1、Filter的理解和应用 实现一个禁止缓存的过滤器。 要求和提示: (1)禁止浏览器缓存所有动态页面;...通过监听器记录在线用户的姓名,在页面进行用户姓名的显示,同时实现对某个用户的强制下线功能。

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

    三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范。也就是接口 Filter 过滤器它的作用是:拦截请求,过滤响应。  拦截请求常见的应用场景有: 1、权限检查 2、...

    Java™ Servlet 规范.

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

    V512工作室Java web的ppt

    第14章 讲解Servlet中的监听器(Listener)技术。 第15章 讲解Servlet过滤器(Filter)技术。 第16章 讲解使用Apache Commons FileUpload实现文件上传,同时讲解了JavaMail和如何运用Apache Commons Email组件发送...

    IDEA版JavaWeb从入门到精通之Servlet第6-7天

    课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...

    老杜javaweb教程配套资料JavaEE帮助文档分享

    主要内容包括:Servlet、JSP、EL表达式、JSTL标签库、Filter过滤器、Listener监听器。在讲解过程中采用的手法是从0到1,让小白学会源码分析,让大牛眼前一亮。总之,不管你是小白,还是已经在从事Java开发的工作者,...

    JAVA EE 开发手册.CHM

    JAVA EE 开发手册 JavaEE是一个开放的、 基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用。 JavaEE的具有可扩展性、性能和可靠性。...8、监听器Listener 9、注解( Annotation)

    IDEA版JavaWeb从入门到精通之Filter过滤器第15天

    课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...

    spring boot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap实现后台权限管理系统源码

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    我的JavaWeb笔记整理

    tomcat、xml、servlet、jsp、listener监听器、EL、JSTL、Cookie、Session、Filter过滤器、JSON、AJAX、i18n、文件上传下载

    springboot权限控制系统

    springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存,quartz定时任务(没有具体业务实现)等技术点都在项目中实现了,可谓是麻雀虽小五脏俱全!...

    权限管理系统 shiro + ssm实现

    springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存,quartz定时任务(没有具体业务实现)等技术点都在项目中实现了,可谓是麻雀虽小五脏俱全!...

    springboot+权限管理系统 shiro + ssm实现 实现菜单,自用

    springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存,quartz定时任务(没有具体业务实现)等技术点都在项目中实现了,可谓是麻雀虽小五脏俱全!...

Global site tag (gtag.js) - Google Analytics