码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-31 21:57:52      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:filter   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的生命周期,我们用起来,就会更加的熟练了。

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

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

标签:filter   filter生命周期   

原文地址:http://blog.csdn.net/chenjinge7/article/details/47174295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!