DRP学习之路--Filter生命周期

Filter的创建

  Filter的创建和销毁由WEB(例如Tomcat)服务器负责。
web 应用程序启动时,web 服务器将创建Filter的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

Filter的销毁

  Web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。

FilterConfig接口

  用户在配置filter时,可以使用<init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

  String getFilterName():得到filter的名称。

  String getInitParameter(String name):返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.

  Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。

  public ServletContext getServletContext():返回Servlet上下文对象的引用。

Filter的部署

  Filter的部署分为两个步骤:

  1、注册Filter

开发好Filter之后,需要在web.xml文件中进行注册,这样才能够被web服务器调用,例如在上一篇文章中

 	<filter>
		<description>CharsetEncodingFilter过滤器</description>
		<!--过滤器类名称-->
		<filter-name>CharsetEncodingFilter</filter-name>
		<!--过滤器类所在路径-->
		<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>

		<init-param>
			<description>配置CharsetEncodingFilter过滤器的初始化参数</description>
			<!--参数名称-->
			<param-name>encoding</param-name>
			<!--参数值-->
			<param-value>GBK</param-value>
		</init-param>		

	</filter>

ps:

<description>用于添加描述信息,该元素的内容可为空,<description>可以不配置。

<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。

<filter-class>元素用于指定过滤器的完整的限定类名。

<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。如果过滤器不需要指定初始化参数,那么<init-param>元素可以不配置。

2.映射Filter

在web.xml文件中注册了Filter之后,还要在web.xml文件中映射Filter

	<!--映射过滤器-->
	<filter-mapping>
		<filter-name>CharsetEncodingFilter</filter-name>
		<!--“*.jsp”表示拦截所有的jsp请求 -->
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

ps:

<filter-mapping>元素用于设置一个Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径

<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字

<url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)

<servlet-name>指定过滤器所拦截的Servlet名称。

<dispatcher>指定过滤器所拦截的资源被 Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher>子元素用来指定 Filter 对资源的多种调用方式进行拦截。如下:

<filter-mapping>
     <filter-name>testFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
 </filter-mapping>

<dispatcher>子元素可以设置的值及其意义:

REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

知道了Filter的生命周期,我们用起来,就会更加的熟练了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 06:16:47

DRP学习之路--Filter生命周期的相关文章

osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo

生命周期中关键3个类: BundleActivator 入口点,类似main方法 BundleContext Bundle上下文对象,在运行期间,为应用程序提供操作osgi框架的方法 Bundle 代表一个已安装的Bundle 接口说明: BundleActivator: public interface BundleActivator { public void start(BundleContext context) throws Exception; public void stop(Bu

DRP学习之路--Filter实现设置字符集

什么是filter? Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态  html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Fi

《Servlet学习笔记》Servlet生命周期和调用

    学习技术有时会感觉很枯燥,有时感觉很绕,N多调用,不好理解,但如果能画出图来,就可以一目了然. 图比文字更容易让人接受,并产生深刻印象.一张图可以包含很多东西. 下面一些图来自于网络,偶然间发现,感觉让人忽然明白并回忆起了好多. Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则直接执行第四步,否则,执行第二步: 装载并创建该Servlet的一个实例对象: 调用Serv

Maven学习笔记(六):生命周期与插件

何为生命周期: Maven的生命周期就是为了对所有的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤.也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上. Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务(如编译源代码)都交由插件来完成.这种思想与设计模式中的模板方法(

IOS学习笔记37——ViewController生命周期详解

在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调.在IOS中,有两类ViewController,一类是显示内容

Vue学习系列(四)——理解生命周期和钩子

前言 在上一篇中,我们对平时进行vue开发中遇到的常用指令进行归类说明讲解,大概已经学会了怎么去实现数据绑定,以及实现动态的实现数据展示功能,运用指令,可以更好更快的进行开发.而在这一篇中,我们将通过实例,探究vue的生命周期. 万物皆有灵,世间万物都拥有灵魂,小到山河湖海,花草树木,蚂蚁到人类,以及所有的动植物,大到地球星空和宇宙,都拥有灵魂,可以说他们都是有生命的,只是他们的生命形态是我们人类所不能理解的存在.在生产中,生命周期通俗来讲,就是从自然中来回到自然中去的全过程,也就是从采集材料设

vue学习(1)生命周期

生命周期的概念: 什么是生命周期: Vue实例有一个完整的生命周期,这个生命周期指的是Vue实例从开始创建,初始化数据,编译模板,挂载Dom,渲染-更新-渲染,卸载等一系列的过程,我们称这是vue的生命周期, 也就是说:vue实例的生命周期是从实力创建到销毁的过程,在生命周期中,提供了一系列的函数,这些函数应用到vue生命周期的不同阶段,我们称之为生命周期钩子,生命周期钩子用来在生命周期的不同阶段来调用不同的函数 生命周期图示:

android学习笔记(5)Activity生命周期学习

对应若水老师视频教程第8课 一定要看这个视频 每个activity都有它的生命周期,开启它,关闭它,跳转到其它activity等等,都会自动调用以下某种方法.对这些个方法覆写后观察学习. protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(

Maven学习小结(七 生命周期[转])

Maven2的阶段(生命周期)说明:Maven2拥有三套独立的生命周期,Maven的命令也是基于这些生命周期来说的.1.clean:清理先前构建的构件,又分为下面三个下阶段: a.pre-clean 执行一些清理前需要完成的工作. b.clean 清理上一次构建生成的文件 c.post-clean 执行一些清理后需要完成的工作2.default:定义了真正构建时所需要的所有步骤,它是这三个中最核心的部分,包含的阶段如下: a.validate 验证项目是正确的并且所有必需的信息都是可用的 b.i