第13章使用Servlet过滤器和监听器

上传人:宝路 文档编号:48592061 上传时间:2018-07-17 格式:PPT 页数:54 大小:1.26MB
返回 下载 相关 举报
第13章使用Servlet过滤器和监听器_第1页
第1页 / 共54页
第13章使用Servlet过滤器和监听器_第2页
第2页 / 共54页
第13章使用Servlet过滤器和监听器_第3页
第3页 / 共54页
第13章使用Servlet过滤器和监听器_第4页
第4页 / 共54页
第13章使用Servlet过滤器和监听器_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第13章使用Servlet过滤器和监听器》由会员分享,可在线阅读,更多相关《第13章使用Servlet过滤器和监听器(54页珍藏版)》请在金锄头文库上搜索。

1、第13章 使用Servlet 过滤器和监听器本章学习目标:理解过滤器和监听器的执行过程和作用掌握过滤器和监听器的开发和部署13.1 Filter 在Web开发中的应用Servlet过滤器是一种Web组件,它们拦截请求和响应 ,以便查看、提取或以某种方式操作客户机和服务器 之间交换的数据。过滤器的功能 分析Web请求,对输入数据进行预处理; 阻止Web请求和响应的进行; 根据功能改动请求的头信息和数据体; 和其他Web资源协作。 13.1.1 过滤器概述对Web应用来说,过滤器就是驻留在服务器端,在源 数据和目的数据间,对Web请求和Web响应的头属性 (Header)和内容体(Body)进行操

2、作的一种特殊Web组 件。如图13-1所示。过滤过滤 器目标资标资 源浏览浏览 器请请求响应应Web容器过滤器的工作原理:用户发送 请求过滤器将用 户的请求发 送至 Web 资源资源将响应发送 至过滤器过滤器将 Web 资源 的响应发送 给用户过 滤 器 AWeb 资源用户JSP Servlet Html过 滤 器 B 过 滤 器 C在一个Web应用程序中,可以部署多个过滤器,这些 过滤器组成一个过滤器链。过滤器链中的每个过滤器都有特定的操作,请求和响 应在浏览器和目标资源之间按照部署描述符中声明的 过滤器的顺序,在过滤器之间进行传递。过滤过滤 器 1目标标资资源浏浏 览览 器请请求响应应We

3、b容 器过滤过滤 器 3过滤过滤 器 4过滤过滤 器 213.1.2 Filter API与过滤器开发相关的接口和类包含在javax.servlet和 javax.servlet.http包中,主要的接口和类如表13-1所示 。接口/类说明 javax.servlet.Filter接口过滤器是执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内 容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。javax.servlet.FilterConfig 接口servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器 。 javax.servlet.F

4、ilterChain接 口FilterChain 是 servlet 容器为开发人员提供的对象,它提供了对某一资源的已过 滤请求调用链的视图。过滤器使用 FilterChain 调用链中的下一个过滤器,如果 调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。javax.servlet.ServeltReque stWrapper类 extends java.lang.Object implements ServletRequest提供 ServletRequest 接口的便捷实现,希望将请求适配到 Servlet 的开发人员可 以子类化该接口。 默认情况下,方法通过包装的请求对象调用。j

5、avax.servlet.ServeltRespo nseWrapper类 extends java.lang.Object implements ServletResponse提供 ServletResponse 接口的便捷实现,希望根据 Servlet 适配响应的开发人员 可以子类化该接口。默认情况下,方法通过包装的响应对象调用。javax.servlet.HttpServeltR equestWrapper类 extends ServletRequestWrapper implements HttpServletRequest提供 HttpServletRequest 接口的便捷实现,希

6、望将请求适配到 Servlet 的开发人 员可以子类化该接口。此类实现 Wrapper 或 Decorator 模式。 默认情况下,方法通过包装的请求对象调用。javax.servlet.HttpServeltR esponseWrapper类 extends ServletResponseWrapper implements HttpServletResponse提供 HttpServletResponse 接口的便捷实现,希望根据 Servlet 适配响应的开发 人员可以子类化该接口。此类实现 Wrapper 或 Decorator 模式。 默认情况下,方法通过包装的响应对象调用。过滤器生

7、命周期过滤器生命周期的各个阶段:实例化 初始化过滤销毁13.1.3 Filter 接口所有的过滤器在开发中必须实现javax.servlet.Filter接 口,并且提供一个公开的不带参数的构造方法。接口定义了init()、doFilter()和destroy()三方法,分别 对应Servlet过滤器生命周期中的初始化、响应和销毁 三个阶段init() 方法Web容器调用init()方法,说明过滤器正被嵌入到Web容器 中去。容器只在实例化过滤器时才会调用该方法一次。初始化方法必须在被调用做过滤工作前正确完成。容器为这个方法传递一个FilterConfig对象,其中包含着在 部署描述符中配置的

8、与过滤器相关初始化参数。public void doFilter (ServletRequest req,ServletResponse res ,FilterChain chain) throws java.io.IOException,ServeltExceptiondoFilter()方法实现了过滤器对请求和响应的操作功能。每当请求和响应经过过滤器链时,容器都要调用一次该方法。FilterChain对象代表了多个过滤器形成的过滤器链。为了将请求/响应沿过滤器链继续传送,在每个过滤器的doFilter() 方法中必须调用FilterChain对象的doFilter()方法。Web容器将请求

9、对象(ServletRequest)、响应对象 (ServletResponse)和过滤器的链接对象(FilterChain)3个参数传 递到该方法。在过滤器中处理的ServletRequest和ServletResponse对象,最终 要传递到被过滤的Servlet或JSP在doFilter方法中可以通过对ServletRequest的操作在Servlet运 行之前改变Web请求的头信息或内容,通过对 ServletResponse的操作在Servlet运行之后改变响应结果。过滤器的doFilter()方法实现中:任何出现在FilterChain的doFilter()方法之前的代码都被看作

10、为预处理过滤器逻辑,在这里对请求进行修改。但不能修改响应信息,因为Web资源的响应处理还没有发生。任何出现在FilterChain的doFilter()方法之后的代码构成了过 滤器逻辑的后期处理。在这一阶段中,外发的Web资源的 响应信息已经处理完毕,可以在这里修改响应信息。此时修改请求没有任何意义,因为请求已经处理完毕。过滤器的一个实例可以同时服务于多个请求public void destroy()Web容器调用destroy()方法表示过滤器生命周期结束。在这个方法中,释放过滤器使用的资源。要开发过滤器只能直接实现Filter接口。13.1.4 FilterConfig 接口当容器对Fil

11、ter对象进行初始化时,容器调用Filter的 init方法,并传入一个实现FilterConfig接口的对象。FilterConfig接口包含方法:public String getFilterName()获得过滤器的名称信息。该名称是在部署描述符中说明的 。public String getInitParamter(String name)获得过滤器的初始化字符串。初始化字符串也是在部署描 述符中说明的。如果这个参数不存在,该方法将返回null。public Enumeration getInitParamterNames()获得一个枚举器,以遍历过滤器的所有初始化字符串。如 果过滤器没有

12、初始化参数,此方法返回一个空的枚举集合 。public ServletContext getServletContext()获得过滤器所在Web应用的Servlet上下文对象引用。13.1.5 FilterChain 接口javax.servlet.FilterChain接口由容器实现,容器将其 实例作为参数传入过滤器对象的doFilter()方法中。过滤器对象使用FilterChain对象调用过滤器链中的下一 个过滤器或者是将调用目标资源。FilterChain接口仅定义一个方法:public void doFilter(ServletRequest req, ServletResponse

13、 res)该方法用于将请求/响应继续沿过滤器链向后传送给下一个 过滤器。如果调用该方法的过滤器是链中最后一个,那么目标资源 被调用。13.1.6 编写过滤器类过滤器开发的第一步是编写过滤器类。利用Eclipse来开发一个名字叫TestFilter.java的过滤器, 它实现了Filter接口1.Eclipse中不可以直接创建过滤器。在Eclipse中新建一个 Java类2.选择“添加”按钮,在弹出窗口中输入“Filter”,选择匹配的类 型javax.servlet。3.点击“确定”、“完成”按钮后,就可以看到创建的过滤器框架 。4.过滤器框架中包含了Filter生命周期的三个方法。我们修改

14、doFilter()方法,完成TestFilter的编写13.1.7过滤器的部署在创建过滤器之后必须将它添加到部署描述符中,这 样容器才会将过滤器投入到服务中去。配置工作由两部分组成:1.声明过滤器元素用于在Web应用中声明一个过滤器。filterdescriptionfilter-namedisplay-namefilter-classiconinit-paramdescriptionparam-nameparam-value1.2. LogonFilter3. com.LogonFilter4. 5. 6. logon_uri7. /logon.jsp8. 9. 10. home_uri1

15、1. /home.jsp12. 13. 2.设置过滤器映射元素用于指定过滤器关联的URL样式或者 Servlet。子元素的值必须是元素中声明过的过 滤器的名字;子元素和可以选择一个设置, 元素为过滤器关联的URL,元 素为过滤器对应的Servlet,当用户访问元素上 指定的资源或元素指定的Servlet时,这个 过滤器才会被容器调用;最多可以有4个元素,元素指定 过滤器对应的请求方式有四种请求方式:REQUEST,INCLUDE,FORWARD和 ERROR,默认是REQUEST。filter-mappingfilter-nameservlet-nameurl-pattern04 dispat

16、cherorREQUEST:当用户直接访问页面时,Web容器将会调用过滤 器。除此之外,不会调用该过滤器。INCLUDE:用户访问的目标资源是通过RequestDispatch的 include()方法访问时,容器会调用过滤器。除此之外,不会调 用该过滤器。FORWARD:用户访问的目标资源是通过RequestDispatch的 forward()方法访问时,容器会调用过滤器。除此之外,不会调 用该过滤器。ERROR:如果目标资源是通过声明式异常处理机制调用时, 容器会调用过滤器。使用元素使用元素将过滤器连接到一个servlet中 。使用将过滤器映射到某个URL模式。1.2.LogFilter3.myServlet4. 1.2.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号