java web课件 第6章.ppt
《java web课件 第6章.ppt》由会员分享,可在线阅读,更多相关《java web课件 第6章.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6 6章章 过滤器过滤器Filter Filter Java WebJava Web程序设计基础程序设计基础6.1 6.1 FilterFilter概述概述n什么是什么是Filter Filter nFilterFilter接口接口 nFilterFilter配置配置 6.1.1 6.1.1 什么是什么是Filter Filter n应用程序中经常会有对于多个请求或应用程序中经常会有对于多个请求或会话都需要的任务,这种情况就需要会话都需要的任务,这种情况就需要使用过滤器(使用过滤器(FilterFilter)n过滤器处于客户端和过滤器处于客户端和底层底层WebWeb应用程序之间,应用程序之
2、间,可以使用过滤器检查可以使用过滤器检查与修改二者之间的与修改二者之间的任何请求与响应任何请求与响应6.1.1 6.1.1 什么是什么是FilterFilter(续)(续)n过滤器是过滤器是WebWeb应用程序组件并与应用程序组件并与WebWeb应应用程序结构绑定。用程序结构绑定。n与其它的与其它的WebWeb应用程序组件不同,过滤应用程序组件不同,过滤器被链接到容器处理通道上。这意味器被链接到容器处理通道上。这意味着过滤器在着过滤器在servletservlet之前访问进入的请之前访问进入的请求,并且在返回给客户端之前访问流求,并且在返回给客户端之前访问流出的响应出的响应n说明:过滤器也是说
3、明:过滤器也是JavaJava类加入到类加入到WebWeb应应用程序时与用程序时与ServletServlet方式相同方式相同过滤器工作原理过滤器工作原理n下图显示了过滤器在容器处理通道中的位置。过下图显示了过滤器在容器处理通道中的位置。过滤器在请求到达其访问的资源之前截取进入的请滤器在请求到达其访问的资源之前截取进入的请求,并在返回给客户端之前截取流出的响应。求,并在返回给客户端之前截取流出的响应。n通过合并过滤器完成的处理与通过合并过滤器完成的处理与WebWeb资源完成的处理,资源完成的处理,建立一个新的独立的处理单元。建立一个新的独立的处理单元。n图中显示了过滤器如何链接形成一个线性的处
4、理图中显示了过滤器如何链接形成一个线性的处理n需要注意的是请求与响应需要通过过滤器需要注意的是请求与响应需要通过过滤器和而请求与响应通过过滤器和,因此和而请求与响应通过过滤器和,因此过滤器被用于所有的请求与响应。过滤器被用于所有的请求与响应。FilterFilter生命周期生命周期n过滤器的生命周期与过滤器的生命周期与servletservlet的生命周的生命周期类似,一个过滤器有四个阶段:实期类似,一个过滤器有四个阶段:实例化、初始化、过滤和清除。例化、初始化、过滤和清除。n容器会调用过滤器上的容器会调用过滤器上的init()init()方法。方法。在在init()init()方法调用完成之
5、后,过滤器方法调用完成之后,过滤器实例准备处理同时发生的多个请求。实例准备处理同时发生的多个请求。n请求到过滤器通过请求到过滤器通过doFilterdoFilter()()方法,方法,类似于请求到类似于请求到servletservlet通过通过service()service()方法。方法。FilterFilter生命周期(续)生命周期(续)n当所有未完成的当所有未完成的doFilterdoFilter()()方法完成返回方法完成返回后,容器将调用过滤器的后,容器将调用过滤器的destroy()destroy()方法。方法。过滤器的方法调用完成后,过滤器会被认过滤器的方法调用完成后,过滤器会被
6、认为是未激活。每个实例的清除均在为是未激活。每个实例的清除均在 destroydestroy()()方法中实现,之后方法中实现,之后JavaJava对象会使用垃圾对象会使用垃圾回收。回收。n一些容器因为性能的因素可能选择实现过一些容器因为性能的因素可能选择实现过滤器实例缓冲池,这意味着一个过滤器实滤器实例缓冲池,这意味着一个过滤器实例的例的destroy()destroy()方法被调用后不久方法被调用后不久init()init()方方法被再次调用。如果你将过滤器部署到带法被再次调用。如果你将过滤器部署到带有过滤器缓冲池的容器中,就需要小心设有过滤器缓冲池的容器中,就需要小心设计过滤器及其上的方
7、法。计过滤器及其上的方法。6.1.2 Filter6.1.2 Filter接口接口 n所有过滤器必须实现所有过滤器必须实现javax.servlet.Filterjavax.servlet.Filter接口,其中定接口,其中定义了三个访求:义了三个访求:init()doFilter()destroy().过滤器类与接口(一)过滤器类与接口(一)n容器调用容器调用init()init()方法初始化过滤器实方法初始化过滤器实例:例:public void init(FilterConfiginit(FilterConfig configconfig)throws ServletExceptionS
8、ervletException n其中其中FilterConfigFilterConfig对象包含过滤器细对象包含过滤器细节与容器的底层支持。下面的例子将节与容器的底层支持。下面的例子将演示如何使用此对象。演示如何使用此对象。过滤器类与接口(二)过滤器类与接口(二)ndoFilterdoFilter()()方法包含过滤器逻辑方法包含过滤器逻辑这与这与servletservlet中中serviceservice()()方法包含的逻辑类似:方法包含的逻辑类似:public void doFilter(ServletRequestdoFilter(ServletRequest reqreq,Serv
9、letResponseServletResponse resres,FilterChainFilterChain chain)chain)throws IOExceptionIOException,ServletExceptionServletException n需要牢记的是同时对多个请求提供服务的过滤器需要牢记的是同时对多个请求提供服务的过滤器只有一个实例(单态)。这意味着任何共享变量只有一个实例(单态)。这意味着任何共享变量(非本地)必须通过同步区域(非本地)必须通过同步区域(synchronized synchronized blocksblocks)来访问。)来访问。nFilterC
10、hainFilterChain参数对正确的过滤器操作是十分重要参数对正确的过滤器操作是十分重要的。必须调用的。必须调用FilterChainFilterChain对象上的对象上的doFilterdoFilter()()方方法,除非想要阻止更深一步的下级处理(换句话法,除非想要阻止更深一步的下级处理(换句话说,阻塞请求到与之相关的底层的说,阻塞请求到与之相关的底层的WebWeb资源)资源)过滤器类与接口(二)过滤器类与接口(二)-2-2n在调用在调用FilterChainFilterChain上的方法之前的任何代上的方法之前的任何代码被考虑过滤器逻辑的预处理。在此阶段,码被考虑过滤器逻辑的预处理
11、。在此阶段,进入的请求有效但并未到进入的请求有效但并未到WebWeb资源。资源。n在调用在调用FilterChainFilterChain上的方法之后的任何代上的方法之后的任何代码被考虑形成过滤器逻辑的后继处理。在码被考虑形成过滤器逻辑的后继处理。在这个阶段,发出的响应已包含由这个阶段,发出的响应已包含由WebWeb资源的资源的完成的完整的响应。完成的完整的响应。n注意:注意:FilterChainFilterChain上的上的doFilterdoFilter()()方法的方法的调用将会调用下一个过滤器调用将会调用下一个过滤器 (当使用过滤当使用过滤器链时器链时)或底层的或底层的WebWeb资
12、源。资源。过滤器类与接口(二)过滤器类与接口(二)-3-3n任何的下级过滤器与底层任何的下级过滤器与底层WebWeb资源的处理都资源的处理都发生在发生在FilterChainFilterChain上的上的doFilterdoFilter()()方法调方法调用期间。请求的处理没有包含在过滤器中用期间。请求的处理没有包含在过滤器中而是被包装到调用而是被包装到调用FilterChainFilterChain的的doFilterdoFilter方法。方法。n这允许你做一些在其它完成请示这允许你做一些在其它完成请示-响应拦截响应拦截机制比较困难的任务:机制比较困难的任务:在预处理与后继处理逻辑间共享变量
13、十分方在预处理与后继处理逻辑间共享变量十分方便。便。过滤器类与接口(三)过滤器类与接口(三)n在容器消除过滤器实例之前将会调用在容器消除过滤器实例之前将会调用destroydestroy()()方法:方法:public void destroy()destroy()6.1.3 Filter6.1.3 Filter配置配置 n本例会阻止来自某个本例会阻止来自某个IPIP地址的请求访问地址的请求访问pizzapizza应用程序,该地址的用户可能信誉不应用程序,该地址的用户可能信誉不佳。下面的建立的步骤:佳。下面的建立的步骤:n1.1.开始编写过滤器开始编写过滤器.创建一个新的文件夹创建一个新的文件
14、夹在在 WEB-INFclasses WEB-INFclasses 命名为命名为 filters.创创建下面的文件建下面的文件 AccessFilter.java,并加并加入下面的代码:入下面的代码:FilterFilter配置(二)配置(二)n.将下面的内容加入到将下面的内容加入到web.xmlweb.xml文件中位于文件中位于 元素之后与任何元素之后与任何servletservlet定义之前:定义之前:Access Access filters.AccessFilterfilters.AccessFilter Access Access /*/*-pattern FilterFilter配
15、置(三)配置(三)n.建立建立denied.jsp文件位于文件位于PizzaPizza文件夹,内容如下:文件夹,内容如下:Access denied Access denied Access denied Access denied Sorry,you cannot order any more pizzas.Sorry,you cannot order any more pizzas.Please pay your bills.Please pay your bills.FilterFilter配置(四)配置(四)n.运行结果如何?运行结果如何?启动启动TomcatTomcat,通过浏览器地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java web课件 第6章 web 课件
限制150内