Filter和Listener

一、Filter——过滤器

     1.什么是Filter

              1) Filter (过滤器) 的基本功能是对Servlet 容器调用Servlet (JSP)的过程进行拦截,从而在Servlet处理请求前和Servlet响应                    请求后实现一些特殊的功能。

              2)在Servlet API 中定义了三个接口类来开供开发人员编写Filter 程序: Filter,FilterChain, FilterConfig

              3) Filter 程序是一个实现了Filter 接口的Java类,与Servlet 程序相似,它由Servlet 容器进行调用和执行

              4) Filter 程序需要在web.xml 文件中进行注册和设置它所能拦截的资源: Filter 程序可以拦截Jsp, Servlet,静态图片文件和静                   态html 文件

     2.Filter的工作原理

             

             1)当在web.xml 中注册了一个Filter 来对某个Servlet 程序进行拦截处理时,这个Filter就成了Tomcat 与该Servlet 程序的                   通信线路上的一道关卡,该Filter 可以对Servlet容器发送给Servlet 程序的请求和Servlet 程序回送给Servlet 容器的响应                 进行拦截,可以决定是否将请求继续传递给Servlet 程序,以及对请求和相应信息是否进行修改。

             2)在一个web应用程序中可以注册多个Filter 程序,每个Filter 程序都可以对一个或一组Servlet 程序进行拦截。

             3)若有多个Filter 程序对某个Servlet 程序的访问过程进行拦截,当针对该Servlet 的访问请求到达时,web容器将把这多                   个Filter程序组台成-一个Filter链(过滤器链)。Filter链中各个Filter 的拦截顺序与它们在应用程序的web.xml 中映射的顺                    序一致

             4)放行请求只需要执行filterChain的dofilter方法

                doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

                在doFilter执行之前,由容器将filterChain对象传入方法。调用此对象的.doFilter()方法可以将请求放行,实际上是执行                   过滤器链中的下一个doFilter方法,但是如果只有一个过滤器,则为放行。

      3.编写Filter的步骤

               1)创建Filter实现类,实现Filter接口

               2)在web.xml文件中配置Filter的信息

                     <filter>

                               <filter-name>  MyFirstFilter   </filter-name>

                               <filter-class>  com.hbnu.filter <filter-class>

                     </filter>

                     <filter-mapping>

                               <filter-name>  MyFirstFilter   </filter-name>

                               <url-pattern>  /index.jsp   </url-pattern>

                    </filter-mapping>

        4.Filter的生命周期

                    1)在服务器启动时,filter 被创建并初始化,执行init()方法。

                    2)请求通过filter时执行doFilter 方法。    

                    3)服务器停止时,调用destroy方法。

        5.url-pattern

                    url-pattern是配置filter 过滤哪些请求的。主要有以下几种配置:

                    web.xml中配置的/都是以当前项目路径为根路径的

                    1)精确匹配:

                     /index.jsp/user/login

                    会在请求/index.jsp、/user/login 的时候执行过滤方法

                    2)路径匹配:

                    /user/*     /*

                    凡是路径为/user/下的所有请求都会被拦截,/*表示拦截系统的所有请求,包括静态资源文件。

                    3)扩展匹配: 

                    *. jsp       *.action

                    凡是后缀名为.jsp .action 的请求都会被拦截。

                    注意: /login/*.jsp 这种写法是错误的,只能是上述三种的任意一种形式。 不能组合新形式。

 

 

二、Listener——监听器

        1.什么是Listener

                 专门用来对其他对象身_上发生的事情或状态改变进行监听和相应处理的对象,当被监视对象发生情况时,立即采取相                    应的行动  

                  作用:监听web变化:Servlet规范中定义的一种特殊类,用于监听web'应用程序中的ServletContext,HttpSession,                                          ServletRequest 等域对象的创建与销毁,以及属性变化    

        2.八大Listener  

           1)ServletContextListener          

                ServletContext生命周期监听器,创建和销毁时被触发。包含两个方法:

                contextlnitialized(ServletContextEvent): ServletContext 创建事件监听

                contextDestroyed(ServletContextEvent): ServletContext 销毁事件监听

          2)ServletContextAttributeListener

                ServletContext属性监听器,发生属性变化时触发。

                attributeAdded(ServletContexttributeEvent):增加属性时调用;

                attributeRemoved(ServletContextAttributeEvent):移除属性时调用

                attributeReplaced(ServletContexttributeEvent):属性替换时调用

          3)HttpSessionListener

               HttpSession生命周期监听器,创建和销毁session时被触发。

               sessionCreated(HttpSessionEvent): session 创建时触发

               sessionDestroyed(HttpSessionEvent): session 销毁时触发,invalid, session 过期。

          4)HttpSessionAttributeListener

                HttpSession属性监听器,session 中属性变化时触发

                attributeAdded(HttpSessionBindingEvent):属性添加时调用

                attributeRemoved(HttpSessionBindingEvent):属性移除时调用

                attributeReplaced(HttpSessionBindingEvent):属性替换时使用

           5)HttpSessionActivationListener

                 HttpSession活化与钝化监听,不需要在web.xml中配置,必须是类实现此接口

                 sessionWillPassivate(HttpSessionEvent):某个类和session一起钝化时调用

                 sessionDidActivate(HttpSessionEvent):某个类和session一起活化时调用

            6)HttpSessionBindingListener

                  HttpSession属性绑定时调用,不需要在web.xml中配置,必须是类实现此接口。当此类被当做属性值绑定到session中                   时触发  

                  valueBound(HttpSessionBindingEvent):属性被设置到session域中时触发

                  valueUnbound(HttpSessionBindingEvent):属性从session域中移除时触发

             7)ServletRequestListener

                   ServletRequest生命周期监听器。ServletRequest 创建和销毁时触发

                   requestlnitialized(ServletRequestEvent):请求初始化时触发

                   requestDestroyed(ServletRequestEvent):请求完成时触发

             8)ServletRequestAttributeListener

                   ServletRequest属性监听器。ServletRequest 中属性变化时触发

                   attributeAdded(ServletRequestAttributeEvent): request 中增加属性调用

                   attributeRemoved(ServletRequestAttributeEvent): request 中移除属性调用

                   attributeReplaced(ServletRequestAttributeEvent): request 中属性替换调用

 

                   ServletContextListener、HttpSessionListener、ServletRequestListener属于生命周期监听类

                   ServletContextAttributeListener、HttpSessionAttributeListener、 ServletRequestAttributel istener属于属性监听类

                   HttpSessionActivationListener、HttpSessionBindingListener 属于特殊监听类

         3.Listener的使用
           1)生命周期、属性监听器:

                        - 创建相应的实现类

                        - 配置web.xml

                        <listener>

                                <listener-class>      com.hbnu.MyFirstListener        </listener-class>

                        </listener>

                   

                

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值