`

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

相关推荐

    servlet+filter+listener 详解

    Servlet、Filter、Listener 详解 Servlet 是运行在服务器上的小程序,它可以使任何 Java 应用程序、...Servlet 负责处理客户端的请求,Filter 负责过滤和拦截 Web 资源,而 Listener 负责监听Servlet 容器中的事件。

    过滤器filter和监听器listener的应用总结

    在Java Web开发中,过滤器...在阅读《过滤器filter和监听器listener的应用总结》这篇博客后,相信你对这两个概念会有更深入的认识。在实际工作中,根据具体需求灵活运用它们,可以大大提升应用的健壮性和用户体验。

    我收集的servlet中事件监听器机制we吧xml配置详解

    在Servlet中,事件监听器机制和`web.xml`配置是两个关键的概念,它们极大地增强了应用的灵活性和可扩展性。 事件监听器机制在Servlet中扮演着重要角色,它允许程序员对特定的事件进行响应,例如请求到达、会话创建...

    servlet_filter_listener

    在Java Web开发中,`Servlet`、`Filter`和`Listener`是三个核心组件,它们在构建动态Web应用程序中扮演着重要角色。本篇将详细阐述这三个概念以及它们的工作原理和应用场景。 首先,我们来了解`Servlet`。Servlet是...

    servlet中的过滤器与监听器

    在Servlet技术中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们帮助开发者实现对请求和响应的拦截、处理以及管理应用程序的状态。 ### 1. Servlet过滤器 **过滤器** 是Servlet API提供的一种...

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    jsp/servlet中过滤器和监听器的区别

    在这些技术中,过滤器(Filter)和监听器(Listener)是两个关键的概念,它们在处理请求、响应以及管理应用程序状态时发挥着重要作用。下面将详细讲解这两者的区别。 1. **过滤器(Filter)** - **定义**:过滤器...

    JavaWebServlet+JSP+EL表达式+JSTL标签库+Filter过滤器+Listener监听器

    JavaWeb技术是构建基于Java平台的Web应用程序的重要框架,它包括了Servlet、JSP、EL表达式、JSTL标签库、Filter过滤器以及Listener监听器等多个关键组件。这些组件协同工作,使得开发者能够创建动态、交互式的Web...

    listener和filter 监听器和过滤器的介绍以及简单使用(csdn)————程序.pdf

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们分别承担着不同的职责。监听器主要用于监听应用程序中的特定事件,而过滤器则用于在请求处理之前和之后对请求和响应进行拦截,...

    STRUTS:listener监听器

    ### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,它们主要用于监听特定事件的发生,并执行相应的处理逻辑。Struts框架作为早期流行的MVC架构之一,充分...

    关于监听器Listener和过滤器的小demo

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两个非常重要的概念,它们主要用于增强应用程序的功能和性能。下面将详细讲解这两个概念及其应用。 ### 监听器(Listener) 监听器是实现特定接口的Java...

    Filter和Listener

    在Java Web开发中,Filter(过滤器)和Listener(监听器)是两个重要的概念,它们在Web应用程序的生命周期管理和请求处理流程中扮演着关键角色。理解它们的区别和应用场景对于构建高效、灵活的Web应用至关重要。 ##...

    杂记(一):Listener、Filter和工具

    首先,Listener(监听器)是Java Servlet规范中的一部分,主要用于监听特定事件并执行相应操作。常见的Listener包括HttpSessionListener、ServletContextListener和ServletRequestListener等。例如,...

    Servlet的监听器小DEMO

    总结来说,Servlet监听器是Java Web开发中的强大工具,能够帮助开发者实现更灵活和精细的控制。通过理解和运用监听器,我们可以提高应用程序的效率,优化资源管理,以及提供更好的用户体验。在实际项目中,应根据...

    监听器访问计数过滤非法字符

    在IT行业中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们在Web应用程序中扮演着不可或缺的角色。本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性...

    web监听器代码--监听servlet

    Web监听器是Java Web应用程序中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如在Servlet上下文初始化或销毁时、用户会话创建或结束时等。在Java Web开发中,监听器通过实现特定接口并配置在`web.xml...

    servlet+filter+lisenter 例子

    总结来说,Servlet、Filter和Listener是Java Web开发中不可或缺的部分,它们共同协作以提供高效、安全和可扩展的Web服务。理解并熟练运用这三个组件,对于任何Java Web开发者来说都是至关重要的技能。在实践中,...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    Listener接口允许开发者注册监听器来监控特定类型的事件,例如应用程序的启动和关闭、HTTP会话的创建与销毁等。在`web.xml`中配置Listener时,其加载顺序通常发生在所有其他组件之前,因为它们经常用于初始化应用...

    web.xmllistener、filter、servlet加载顺序.pdf

    在Web应用开发中,了解`web.xml`中的监听器(XMLListener)、过滤器(Filter)和Servlet的加载顺序是至关重要的。这些组件是Java Servlet规范的一部分,用于增强和控制Web应用的行为。以下是对这些概念的详细说明: ...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    3. **Listener**: 在监听器的初始化方法(如contextInitialized())中,可以获取ApplicationContext并注入所需的bean。 对于SSH整合,Spring还提供了Struts的Spring插件,它可以自动将ActionForm转换为Spring管理的...

Global site tag (gtag.js) - Google Analytics