zoukankan      html  css  js  c++  java
  • web.xml过滤器 filter

    web.xml 过滤器 — 函数回调,指责链模式

    1、 Filter作用 
    当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件web.xml设置的过滤规则,能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response。 —— filter实际是一个servlet chaining(servlet 链)

    • 在servlet被调用之前截获;

    • 在servlet被调用之前检查servlet request;

    • 根据需要修改request头和request数据;

    • 在servlet被调用之后截获.

    • 根据需要修改response头和response数据;

    2、 过滤器生命周期的四个阶段:

    1. 实例化:Web容器在部署Web应用程序时对所有过滤器进行实例化。Web容器回调它的无参构造方法。

    2. 初始化:实例化完成之后,马上进行初始化工作。Web容器回调init()方法。

    3. 过滤:请求路径匹配过滤器的URL映射时。Web容器回调doFilter()方法——主要的工作方法。

    4. 销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。

    3、 过滤器接口介绍

    • init(用来初始化)

    • dofilter(用来执行具体的操作) 
      此方法是由Servlet容器提供给开发者的,用于对资源请求过滤链的依次调用,通过FilterChain调用过滤链中的下一个过滤器,如果是最后一个过滤器,则下一个就调用目标资源。

    • destory(用来销毁)

    4、拦截方式

    • request过滤器(默认):只有直接访问该目标资源时执行。包括:在地址栏中直接访问、表单提交、超链接、重定向

    • forward过滤器:转发访问执行过滤器。包括RequestDispatcher#forward()方法,标签都是转发访问;

    • include过滤器:包含访问执行过滤器。包括RequestDispatcher#include()方法,标签都是包含访问;

    • error过滤器:配置,出现该异常代码时,执行过滤器。

       1 <filter>
       2         <filter-name>patronliFilter</filter-name>//定义名字  
       3         <filter-class>com.servlet.DemoFilter</filter-class>//实现类  
       4 </filter>  
       5 <filter-mapping>
       6         <filter-name>DemoFilter</filter-name>  
       7         <url-pattern>/*</url-pattern>  
       8         <!-- 过滤器拦截规则:request过滤器,include过滤器,forward过滤器,error过滤器 -->
       9         <dispatcher>REQUEST</dispatcher>  
      10         <dispatcher>FORWARD</dispatcher>  
      11 </filter-mapping>  
      12 <!-- 如果想要配置多个拦截器,可以依次向下写 -->
       1 import javax.servlet.Filter;        //过滤器接口
       2 import javax.servlet.FilterChain;   //过滤器链接口
       3 import javax.servlet.FilterConfig;  //过滤器配置接口,getInitParameter方法用于获取web.xml中的初始化参数
       4 
       5 public class DemoFilter implements Filter{
       6     protected FilterConfig config;    
       7     protected String encoding;
       8 
       9     @Override //初始化的方法
      10     public void init(FilterConfig config) throws ServletException {
      11        this.config=config;
      12        this.encoding = config.getInitParameter("encoding"); //通过init-param设置参数,在init中取得
      13     }
      14 
      15     @Override //执行过滤的方法
      16     public void doFilter(ServletRequest arg0, ServletResponse arg1,
      17             FilterChain arg2) throws IOException, ServletException {
      18         request.setCharacterEncoding(encoding);
      19         System.out.println("Do...before..");  
      20         chain.doFilter(request, response); //由该方法进入下一过滤链。(filter拦截栈,后进先出)
      21         System.out.println("Do..after...");  
      22     }
      23 
      24     @Override //销毁的方法
      25     public void destroy() {
      26     }
      27 }

      引用:web.xml之过滤器详解

      引用:JavaWeb过滤器和监听器详解

     

    欢迎疑问、期待评论、感谢指点 -- kiqi,愿同您为友

    -- 星河有灿灿,愿与之辉

  • 相关阅读:
    结对编程——四则运算
    需求分析
    结对编程
    调查问卷的心得体会
    软件工程课初步目标
    软件工程课程建议
    结对编程--fault,error,failure
    结对编程--四则运算
    需求分析
    结对编程
  • 原文地址:https://www.cnblogs.com/kiqi/p/10454765.html
Copyright © 2011-2022 走看看