创新思维第九章过滤器与监听器张化龙18294401855创新思维创新思维本章学习任务了解Servlet过滤器的基本概念掌握Servlet过滤器的工作原理掌握Servlet过滤器的配置过程了解Servlet监听器的基本概念掌握Servlet监听器的工作原理掌握Servlet监听器的三种类型掌握Servlet监听器的配置过程创新思维创新思维9.1Servlet过滤器的基本概念Filter即过滤器,是在Servlet2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源时,即可使用过滤器完成过滤器是以一种组件的形式绑定到Web应用程序当中的,在没有使用过滤器以前,客户端都是直接调用请求Web资源的,但是一旦加入了过滤器,请求就会先交给过滤器处理,然后再访问Web资源,达到对某些资源的限制访问创新思维创新思维9.1Servlet过滤器的基本概念Servlet过滤器介于与之相关的Servlet或JSP页面与客户端之间,工作原理:当某个资源与Servlet过滤器关联后,对该资源的所有请求都会经过Servlet过滤器,Servlet过滤器在Servlet被调用之前会检查请求对象(Request对象),并决定是将请求转发给过滤器链中的下一个资源还是中止该请求并响应用户若请求被转发给过滤器链中的下一个资源处理后,Servlet过滤器会检查响应对象(Response对象),进行处理后返回给用户创新思维创新思维9.1Servlet过滤器的基本概念Servlet过滤器其实就是一种小型的、可插入的Web组件,它能够对Servlet容器的请求和响应进行拦截和处理,并能生成请求和响应。创新思维创新思维9.2Servlet过滤器的配置配置Servlet过滤器包括下面两个步骤:1、命名Servlet过滤器和指定Servlet过滤器相应的实现类,并且可选择指定传递至Servlet过滤器的初始化参数2、将Servlet过滤器映射至URL或Servlet,这是通过filter-mapping元素来实现的创新思维创新思维9.2Servlet过滤器的配置命名过滤器和实现类并设置初始参数filterfilter-nameFilterName/filter-namefilter-classpackage.className/filter-classinit-paramparam-nameParamName1/param-nameparam-valueParamValue1/param-value/init-paraminit-paramparam-nameParamName2/param-nameparam-valueParamValue2/param-value/init-param/filter创新思维创新思维9.2Servlet过滤器的配置将Servlet过滤器映射至URL的配置代码如下:filter-mappingfilter-nameFilterName/filter-nameurl-pattern/path/url-pattern/filter-mappingfilter-name元素和filter元素的子元素filter-name一致,url-pattern元素指定了过滤器的映射路径创新思维创新思维9.2Servlet过滤器的配置Servlet过滤器还可映射至Servlet:filter-mappingfilter-nameFilterName/filter-nameservlet-nameServletName/servlet-name/filter-mappingfilter-name元素和filter元素的子元素filter-name一致,servlet-name元素指定过滤器映射的Servlet的名称创新思维创新思维9.2Servlet过滤器的配置创建过滤器须实现javax.servlet.Filter接口,该接口内定义了3个方法:init(FilterConfigconfig):用于初始化过滤器,并其内获取web.xml文件中配置的过滤器初始化参数destroy():用于销毁过滤器创新思维创新思维9.2Servlet过滤器的配置doFilter(ServletRequestreg,ServletResponseres,FilterChainchain):用于进行过滤操作,该方法的第一个参数为ServletRequest对象,此对象给过滤器提供了对进入的信息(包括表单数据、Cookie和HTTP请求头)的完全访问第二个参数为ServletResponse,用于响应使用ServletRequest对象访问的信息,通常在简单的过滤器中忽略此参数;最后一个参数为FilterChain,该参数用来调用过滤器链中的下一个资源。创新思维创新思维9.3Servlet过滤器应用实例我们来做一个IP过滤的实例创新思维创新思维9.3Servlet过滤器应用实例创新思维创新思维9.3Servlet过滤器应用实例创新思维创新思维9.4Servlet监听器的工作原理Servlet监听器是Web应用程序事件模型的一部分,当Web应用中的某些状态发生改变时,Servlet容器就会产生相应的事件,比如创建ServletContext对象时触发ServletContextEvent事件,创建HttpSession对象时触发HttpSessionEvent事件,Servlet监听器可接收这些事件,并可以在事件发生前、发生后可以做一些必要的处理创新思维创新思维9.5监听器的类型根据监听对象的不同,Servlet2.4将Servlet监听器划分为以下3种:ServletContext事件监听器:用于监听应用程序环境对象即applicationHttpSession事件监听器:用于监听用户会话对象即sessionServletRequest事件监听器:用于监听请求消息对象即request创新思维创新思维9.5.1ServletContext事件监听器对ServletContext对象进行监听的接口有ServletContextAttributeListener和ServletContextListener其中ServletContextAttributeListener用于监听ServletContext对象中属性的改变,包括增加属性、删除属性和修改属性。ServletContextListener用于监听ServletContext对象本身的改变,例如ServletContext对象的创建和销毁创新思维创新思维9.5.1ServletContext事件监听器ServletContext事件监听器中的接口和方法:接口名称方法名称描述ServletContextAttributeListenerattributeAdded(ServletContextAttributeEventscae)增加属性时激发此方法attributeRemoved(ServletContextAttributeEventscae)删除属性时候激发此方法attributeReplaced(ServletContextAttributeEventscae)修改属性时激发此方法ServletContextListenercontextDestroyed(ServletContextEventsce)销毁ServletContext时激发此方法contextInitialized(ServletContextEventsce)创建ServletContext时激发此方法创新思维创新思维9.5.2HttpSession事件监听器对会话对象进行监听的接口有HttpSessionAttributeListener、HttpSessionListener、HttpSessionActivationListener和HttpSessionBindingListener其中HttpSessionAttributeListener用于监听HttpSession对象中属性的改变,例如属性的增加、删除和修改;HttpSessionListener用于监听HttpSession对象的改变,例如HttpSession对象的创建与销毁,HttpSessionBindingListener用于监听HttpSession对象的绑定状态,例如添加对象和移除对象创新思维创新思维9.5.2HttpSession事件监听器接口名称方法名称描述HttpSessionAttributeListenerattributeAdded(HttpSessionBindingEventhsbe)增加属性时激发此方法attributeRemoved(HttpSessionBindingEventhsbe删除属性时候激发此方法attributeReplaced(HttpSessionBindingEventhsbe)修改属性时激发此方法HttpSessionListenersessionCreated(HttpSessionEventhse)创建HttpSession时激发此方法sessionDestroyed(HttpSessionEventhse)销毁HttpSession时激发此方法HttpSessionBindingListenervalueBound(HttpSessionBindingEventhsbe)调用setAttribute()方法时激发此方法valueUnbound(HttpSessionBindingEventhsbe)调用removeAttribute()方法时激发此方法创新思维创新思维9.5.3ServletRequest事件监听器对请求消息对象进行监听的接口有ServletRequestListener和ServletRequestAttributeListener,其中ServletRequestListener用于监听ServletRequest对象的变化,例如ServletRequest对象的创建和销毁ServletRequestAttributeListener用于监听ServletRequest对象中属性的变化,例如属性的增加、删除和修改创新思维创新思维9.5.3ServletRequest事件监听器ServletRequest事件监听器的接口和方法如表所示:接口名称方法名称描述ServletRequestAttributeListenerattributeAdded(ServletRequestAttributeEventsrae)增加属性时激发此方法attributeRemoved(ServletRequestAttributeEventsrae)删除属性时候激发此方法attributeReplaced(ServletRequestAttributeEventsrae)修改属性时激发此方法ServletRequestListenerrequestDestroyed(ServletRequestEventsre)销毁ServletRequest时激发此方法requestInitialized(ServletRequestEventsre)创建ServletRequest时激发此方法创新思维创新思维9.6Servlet监听器应用实例我们用监听器来完善以前做过统计网站总访客人数的例子,并且实现在线人数统计web.xml配置创新思维创新思维9.6Servlet监听器应用实例创新思维创新思维本章小结本章我们学习了Servlet过滤器的工作原理Servlet过滤器的配置过程Servlet监听器的工作原理Servlet监听器的三种类型Servlet监听器的配置过程创新