菜鸟程序猿之过滤器使用

一、过滤器
1.1概述
Servlet的技术规范中,定义了Servlet、Filter(过滤器)、Listener(监听器)三门技术。
过滤器也被称为拦截器。

过滤器(拦截器)可以拦截对资源的访问,一个资源可以被多个过滤器所拦截;一个过滤器
又可以拦截多个资源。拦截下来后可以控制是否允许访问(权限控制)、在访问资源之前或之后做一些
操作(比如:事务管理、乱码处理、禁止jsp页面缓存等等)
1.2过滤器的开发
开发步骤:
1、创建一个类实现Filter接口,实现对应的方法
2、在web.xml文件中进行配置。

具体实现:
1、编写一个类实现Filter接口
   ~~Filter的声明周期:
      当服务器启动,web应用加载后立即创建出当前web项目的所有过滤器对象,创建出来后会立即调用
    init方法进行初始化。从此这些对象就驻留在了内存中,为后续对服务器的请求进行拦截,每次拦截到
    对资源的访问都会调用doFilter方法,直到服务器关闭或web应用移除出容器时,随着该web应用的销
    毁其中的过滤器对象也随之销毁,在销毁之前调用destory方法进行善后操作。

   init(FilterConfig config)在过滤器初始化时调用
       FilterConfig config:代表当前Filter在web.xml文件中的配置信息
              可以获取过滤器的初始化参数。
             String val = filterConfig.getInitParameter("name2");
         Enumeration<String> enums = filterConfig.getInitParameterNames();
          可以获取代表当前web应用ServletContext对象(application)
                 ServletContext sc = filterConfig.getServletContext();
   doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)符合该过滤器拦截条件的请求时调用该方法。
           FilterChain:过滤器链
             一个web资源可以被多个过滤器所拦截,过滤器的顺序和Filter在web.xml文件的
    配置顺序(<filter-mapping>)相同。先配置的先执行。
        这些过滤器按照拦截的顺利组成了一个拦截器链,用FilterChain类对象代表,如果
        当一个过滤器执行过后,还想执行后续的过滤器,则需要调用FilterChain的doFilter(request,response)方法,
    表示放行可以去执行过滤器链的下一个节点,如果下一个节点仍然是过滤器则接着过滤,如果下一个
    节点是被访问的资源,则直接执行访问的资源。

   destory()过滤器销毁时调用,做善后的操作
2、在web应用的web.xml文件中配置过滤器
 <!-- 配置一个过滤器 -->
  <filter>
     <filter-name>FirstFilter</filter-name>
     <filter-class>cn.tedu.filter.FirstFilter</filter-class>
     <init-param><!-- 配置一个初始化参数 -->
       <param-name>name1</param-name><!-- 初始化参数的名称 -->
       <param-value>value1</param-value><!-- 初始化参数的值-->
     </init-param>
     <init-param>
       <param-name>name2</param-name>
       <param-value>value2</param-value>
     </init-param>
  </filter>
  <filter-mapping>
      <filter-name>FirstFilter</filter-name>
      <!-- 要拦截的路径,路径的写法和servlet路径配置的方式一致,可以配置多个 -->
      <url-pattern>/*</url-pattern>
      <!--<servlet-name></servlet-name> 拦截指定的servlet -->
      <!-- dispatcher拦截方式:
      REQUEST:代表请求(缺省值)
      ERROR:代表出错
      FORWARD:代表服务器转发
      INCLUDE:代表包含时。
      如果该配置没有指定,则默认拦截REQUEST类型。
       -->
      <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

1.3Filter的重要应用
 1、全站的中文乱码的处理
   想要改变不喜欢的方法
      继承
          不能修改已有对象身上方法。
      装饰者模式
          可以修改已有对象身上方法。
      动态代理(以后再讲)

    String getParameter(String name)    
    Map getParameterMap()     
    Enumeration getParameterValues()
  开发步骤1:
       创建类EncoderFilter类实现Filter接口
    步骤2:
       在web.xml文件中进行配置。
    步骤3:
       在实现类EncoderFilter实现接口中的抽象方法
   

猜你喜欢

转载自blog.csdn.net/yxh13521338301/article/details/80640876