版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb程序设计任务教程第8章Servlet高级·
使用Filter实现用户自动登录·
传Filter实现统一全站编码·Filter映射·Servlet事件监听器第6章过滤器与监听器学习目标了解什么是过滤器能够使用过滤器实现统一全站编码熟悉8种监听器掌握使用监听器监听域对象的生命周期和属性变更了解如何使用过滤器技术改进用户管理系统什么是Filter?Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。6.1 Filter概述6.1.1 Filter当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才会发送给客户端。Filter在Web应用中拦截的过程如下图所示:Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,在Servlet进行响应处理前后实现一些特殊功能。6.1 Filter概述6.1.1 Filter6.1.2 Filter的工作流程Filter过滤器就是一个实现了javax.servlet.Filter接口的类,在javax.servlet.Filter接口中定义了三个方法init(FilterConfigfilterConfig)doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)destroy()6.1.3 Filter接口为了获取Filter程序在web.xml文件中的配置信息,ServletAPI提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法。Filter的生命周期分为以下3个阶段。1.初始化阶段Servlet容器负责加载和实例化Filter。容器启动时,读取web.xml或@WebFilter的配置信息,对所有的过滤器进行加载和实例化。加载和实例化完成后,Servlet容器调用init()方法初始化Filter实例。在Filter的生命周期内,init()方法只执行一次。2.拦截和过滤阶段该阶段是Filter生命周期中最重要的阶段。当客户端请求访问Web资源时,Servlet容器会根据web.xml或@WebFilter的过滤规则进行检查。当客户端请求的URL与过滤器映射匹配时,容器将该请求的request对象、response对象及FilterChain对象以参数的形式传递给Filter的doFilter()方法,并调用该方法对请求/响应进行拦截和过滤。3.销毁阶段Filter对象创建后会驻留在内存中,直到容器关闭或应用被移除时才会被销毁。在销毁Filter对象之前,容器会先调用destory()方法,释放Filter占用的资源。在Filter的生命周期内,destory()只执行一次。6.1.3 Filter接口6.1.4 Filter开发步骤(1)定义类,实现Filter接口,并重写其所有方法(2)配置Filter拦截资源的路径:在类上定义@WebFilter注解。(3)在doFilter()方法中输出一句话,并放行,代码如下。publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{ System.out.println("filter被执行了..."); chain.doFilter(request,response); }上述代码中的“chain.doFilter(request,response)”就是放行,也就是让其访问本该访问的资源。示例6-1使用单个过滤器拦截Servlet的访问Filter拦截的资源需要在web.xml文件中进行配置,即Filter映射。使用通配符“*”来实现让过滤器拦截所有的请求访问拦截用户所有请求拦截不同方式请求<filter-mapping>元素中有一个特殊的子元素<dispatcher>,该元素用于指定过滤器所拦截的资源被Servlet容器调用的方式Filter的映射方式<dispatcher>元素的值共有四个:REQUEST、INCLUDE、FORWARD、ERROR。Filter的映射方式可分为两种6.1.5 Filter部署配置web.xml文件配置Annotation(注解)配置采用Annotation(注解)进行部署配置,其原理和web.xml文件配置基本一致,也是必须说明如何解决前述的3个问题,只是摆放的位置不同,Annotation(注解)配置直接在过滤器代码中进行,比较方便,其语法形式上也略有差别,6.1.5 Filter部署配置在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤器链)。Filter链用FilterChain对象来表示,FilterChain对象中有一个doFilter()方法,该方法作用就是让Filter链上的当前过滤器放行,请求进入下一个Filter6.1.4 Filter链示例6-2多个过滤器拦截演示2任务目标:详见示例6-3实现步骤:
1编写form.jsp页面创建Servlet创建过滤器配置映射信息启动项目,进行测试学会如何使用Filter实现统一全站编码6.2.1使用Filter实现统一全站编码6.2 过滤器实现统一全站编码2任务目标:详见示例6-4实现步骤:
1删除之前各页面中的Session代码创建过滤器配置映射信息启动项目,进行测试学会使用过虑器改进用户登录6.2.2用户管理系统案例的登录功能改进6.2 过滤器实现统一全站编码什么是事件监听器?鼠标点击事件键盘按下事件在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件、监听键盘按下事件等,此时就需要使用事件监听器。6.3 Listener监听器6.3.1 Listener概述事件监听器用于对程序中发生的事件进行监听,在监听的过程中会涉及几个重要组成部分:事件(Event)事件源事件处理器事件监听器(Listener)用户的一个操作,如点击一个按钮、调用一个方法、创建一个对象等。产生事件的对象。负责监听发生在事件源上的事件。监听器的成员方法,当事件发生的时候会触发对应的处理器(成员方法)。6.3.1 Listener概述事件监听器在进行工作时,可分为几个步骤,具体如下:(1)注册监听器(2)传递事件对象(3)处理事件源将监听器绑定到事件源,也就是注册监听器。事件发生时会触发监听器的成员方法,即事件处理器,传递事件对象。事件处理器通过事件对象获得事件源,并对事件源进行处理。6.3.1 Listener概述用于监听域对象创建和销毁的事件监听器用于监听域对象属性增加和删除的事件监听器用于监听绑定到HttpSession域中某个对象状态的事件监听器ServletContextListener接口HttpSessionListener接口ServletRequestListener接口ServletContextAttributeListener接口HttpSessionAttributeListener接口ServletRequestAttributeListener接口HttpSessionBindingListener接口、HttpSessionActivationListener接口在开发Web应用程序时,也经常会使用事件监听器,这个事件监听器被称为Servlet事件监听器,Servlet事件监听器是一个实现特定接口的Java程序,专门用于监听Web应用程序,根据监听事件的不同可将这些接口分为三类。6.3.1 Listener概述6.3.2 监听域对象的生命周期
监听器监听器描述创建和销毁方法ServletContextListener监听ServletContext对象的创建与销毁过程voidcontextInitialized(ServletContextEventsce)voidcontextDestroyed(ServletContextEventsce)HttpSessionListener监听HttpSession对象的创建和销毁过程voidsessionCreated(HttpSessionEventse)voidsessionDestroyed(HttpSessionEventse)ServletRequestListener监听ServletRequest对象的创建和销毁过程voidrequestInitialized(ServletRequestEventsre)voidrequestDestroyed(ServletRequestEventsre)在Web应用程序的运行期间,Web容器会创建和销毁3个比较重要的对象ServletContext、HttpSession和ServletRequest,这些对象被称为域对象。为了监听域对象的生命周期,ServletAPI专门提供了3个接口:ServletContextListener、HttpSessionListener和ServletRequestListener,可以分别用于监听不同域对象的生命周期。监听域对象生命周期监听器的方法如表6-2所示。6.3.3 注册监听器注册Servlet监听器有2种方式,分别是:1.在web.xml中注册监听器在web.xml中使用<listener>标签配置监听器,Web容器会自动把监听器注册到事件源中,示例代码如下。<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"><listener>
<listener-class>listener.MyListener</listener-class>
</listener></web-app>6.3.3 注册监听器2.使用@WebListener注册监听器在监听器类上使用@WebListener注解,可以将该Java类注册为一个监听器类。示例代码如下。packagenet.biancheng.www.servlet;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.annotation.WebListener;/*监听器实例代码*/@WebListenerpublicclassMyListenerimplementsServletContextListener{publicMyListener(){}publicvoidcontextDestroyed(ServletContextEventsce){}publicvoidcontextInitialized(ServletContextEventsce){}}使用HttpSessionBindingListener和HttpSessionActivationListener时,不必进行注册,直接创建Java类实现这两个接口即可。示例6-5监听域对象生命周期示例6-7查看监听效果6.3.4 监听域对象的属性变更监听对象属性变更的接口在程序开发中,不仅需要对域对象进行监听,还需要对某个域对象属性的变更进行监听,为了完成这样的功能,ServletAPI专门提供了ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener接口,三个接口都定义了同名的方法,分别用于处理被监听对象属性的增加、删除和替换监听器监听器描述方法ServletContextAttributeListener用于监听ServletContext对象的属性新增、移除和替换publicvoidattributeAdded(ServletContextAttributeEventscae)publicvoidattributeRemoved(ServletContextAttributeEventscae)publicvoidattributeReplaced(ServletContextAttributeEventscae)HttpSessionAttributeListener用于监听HttpSession对象的属性新增、移除和替换publicvoidattributeAdded
(HttpSessionBindingEvent
hsbe)publicvoidattributeRemoved(HttpSessionBindingEvent
hsbe)publicvoidattributeReplaced(HttpSessionBindingEvent
hsbe)ServletRequestAttributeListener用于监听HttpServletRequest对象的属性新增、移除和替换publicvoidattributeAdded(ServletRequestAttributeEventsrae)publicvoidattributeRemoved(ServletRequestAttributeEventsrae)publicvoidattributeReplaced(ServletRequestAttributeEventsrae)6.3.5 感知被HttpSession绑定的事件监听器程序开发中经常使用Session域来存储对象,每个对象在该域中都有多种状态,为了观察Session域中对象的状态,ServletAPI还提供了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 做围墙合同范例
- 印刷底合同范例
- 多个人合租合同范例
- 流动资金合同范例
- 法人土地出租合同范例
- 出租野餐用具合同范例
- 2025珠海市劳动合同标准版
- 人才转让合同范例范例
- 国家债务合同范例
- 完整版100以内加减法混合运算4000道149
- 2024年护校队安全工作制度(3篇)
- 安全生产知识负责人复习题库(附参考答案)
- 2024年安徽省广播电视行业职业技能大赛(有线广播电视机线员)考试题库(含答案)
- 山东省济南市济阳区三校联考2024-2025学年八年级上学期12月月考语文试题
- 糖尿病酮酸症中毒
- Unit 6 Food Lesson 1(说课稿)-2024-2025学年人教精通版(2024)英语三年级上册
- 东北师大附属中学2025届高一物理第一学期期末质量检测试题含解析
- HSE(健康、安全与环境)计划书
- GB/T 44570-2024塑料制品聚碳酸酯板材
- 雨的形成课件教学课件
- 金蛇纳瑞2025年公司年会通知模板
评论
0/150
提交评论