好记性不如烂笔头30-java应用中的过滤器Filter(2)

来源:互联网 发布:网络诗选 编辑:程序博客网 时间:2024/04/29 15:54

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

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

过滤器允许灵活配置,以应对复杂的环境。允许过滤器灵活配置的是FilterConfig接口。

1、FilterConfig接口

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

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

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

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

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

2、JAVA实现利用FilterConfig得到filter配置信息

过滤器的JAVA代码:

package com.filter;

import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

/**

 *一个简单带过滤器配置的过滤器

 *@author 范芳铭

 */

public class EasyFilterConfig implementsFilter {

    @Override

    publicvoid init(FilterConfig filterConfig) throws ServletException {

        System.out.println("----过滤器初始化----");

        //得到过滤器的名字

        StringfilterName = filterConfig.getFilterName();

        //得到在web.xml文件中配置的初始化参数

        StringinitParam1 = filterConfig.getInitParameter("name");

        StringinitParam2 = filterConfig.getInitParameter("like");

        //返回过滤器的所有初始化参数的名字的枚举集合。

        Enumeration<String>initParameterNames = filterConfig

                .getInitParameterNames();

        System.out.println("过滤器名称:" + filterName);

        System.out.println("初始参数name:"+ initParam1);

        System.out.println("初始参数like:"+ initParam2);

        while(initParameterNames.hasMoreElements()) {

            StringparamName = (String) initParameterNames.nextElement();

            System.out.println("初始参数:" + paramName);

        }

    }

 

    //过滤器功能在这里实现

    @Override

    publicvoid doFilter(ServletRequest request, ServletResponse response,

            FilterChainchain) throws IOException, ServletException {

 

        //对request和response进行一些预处理

        request.setCharacterEncoding("UTF-8");

        response.setCharacterEncoding("UTF-8");

        response.setContentType("text/html;charset=UTF-8");

 

        System.out.println("###过滤器执行前!!!");

        chain.doFilter(request,response); //让目标资源执行,放行

        System.out.println("---过滤器执行后!!!");

    }

 

    @Override

    publicvoid destroy() {

        System.out.println("----过滤器销毁----");

    }

}

 

3、将过滤器添加到Web.xml

    <!--配置过滤器 -->

    <filter>

        <filter-name>easyFilter</filter-name>

        <filter-class>com.filter.EasyFilterConfig</filter-class>

         <!--配置EasyFilterConfig过滤器的初始化参数-->

         <init-param>

              <description>配置EasyFilterConfig过滤器的初始化参数</description>

             <param-name>name</param-name>

             <param-value>ffm</param-value>

         </init-param>

         <init-param>

              <description>配置EasyFilterConfig过滤器的初始化参数</description>

             <param-name>2</param-name>

             <param-value>java2</param-value>

         </init-param>

         <init-param>

              <description>配置EasyFilterConfig过滤器的初始化参数</description>

             <param-name>3</param-name>

              <param-value>java3</param-value>

         </init-param>

    </filter>

 

    <!--映射过滤器 -->

    <filter-mapping>

        <filter-name>easyFilter</filter-name>

        <!--“/*”表示拦截所有的请求-->

        <url-pattern>/*</url-pattern>

    </filter-mapping>

</web-app>

参数说明

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

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

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

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

4、测试结果

将WEB服务启动起来,这个就自动被加载执行了。

----过滤器初始化----

过滤器名称:easyFilter

初始参数name:ffm

初始参数like:null

初始参数:3

初始参数:2

初始参数:name

0 0