zoukankan      html  css  js  c++  java
  • Filter

    Javaweb三大组件:servlet,filter,listener

    filter:过滤器

    生活中的过滤器:净水器,空气净化器,土匪

    web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

    我家相当于浏览器,我相当于一个请求,大山相当于服务器,外婆家就相当于资源。

    请求在请求资源时会有过滤器拦截这个请求,过滤器可以增强请求的功能。

    过滤器的作用:

    一般用于完成通用的操作,例如:登录验证,统一字符编码,敏感字符过滤。

    过滤器的快速入门:

    步骤

    1.定义一个类,实现接口Filter

    2.复写方法

    3.配置拦截路径

    配置方法有两种:

    web.xml

    注解的方式

    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    /**
     * 
     * @author 000
     * 过滤器快速入门
     */
    @WebFilter("/*")//访问所有资源之前都会执行过滤器
    public class FilterDemo01 implements Filter{
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
                throws IOException, ServletException {
            // TODO Auto-generated method stub
            System.out.println("filterDemo01被执行了");
            
            //放行
            filterChain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            
        }
    
    }

    过滤器细节:

    web.xml配置

    过滤器执行流程

    过滤器声明周期

    过滤器配置详解

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>Web_Filter_02</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <filter>
          <filter-name>demo1</filter-name>
          <filter-class>com.logan.study.filter.FilterDemo01</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>demo1</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>

    url-pattern表示拦截路径

    过滤器的执行流程:

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    /**
     * Servlet Filter implementation class FilterDemo02
     */
    @WebFilter("/*")
    public class FilterDemo02 implements Filter {
    
        /**
         * Default constructor. 
         */
        public FilterDemo02() {
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see Filter#destroy()
         * 在服务器正常关闭时,Filter对象会销毁,会执行destroy方法。一般用来释放资源
         */
        public void destroy() {
            System.out.println("FilterDemo02 destroy...");
            // TODO Auto-generated method stub
        }
    
        /**
         * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
         * 每一次请求被拦截,会执行。
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            // place your code here
    
            System.out.println("请求来了");
            //对request消息进行增强
            // pass the request along the filter chain
            chain.doFilter(request, response);
            //对response消息进行增强
            System.out.println("响应回去了");
        }
    
        /**
         * @see Filter#init(FilterConfig)
         * 在服务器启动时,会创建filter对象,然后调用init方法。一般用来加载资源
         */
        public void init(FilterConfig fConfig) throws ServletException {
            // TODO Auto-generated method stub
            System.out.println("FilterDemo02 init...");
        }
    
    }

    执行流程:

    执行过滤器

    执行放行资源

    执行放行代码下面的代码。

    过滤器声明周期方法:

    init:在服务器启动后,会创建Filter对象,然后调用init方法,用于加载资源

    doFilter:每一次请求被拦截资源时,会执行,可以执行多次。

    destory:在服务器正常关闭后被调用,一般用于释放资源。

    过滤器配置详解:

    拦截路径的配置:

    1.具体的资源路径:/index.jsp 只有访问index.jsp资源是,过滤器才会被执行

    2.拦截目录:/user/*,访问/user下的所有资源时,过滤器会被执行

    3.后缀名:*.jsp 访问所有后缀名为jsp的资源时,过滤器都会被执行

    4.拦截所有资源:/*

    拦截方式配置:资源被访问的方式

    注解配置:

    设置dispatcherType属性

    1.REQUEST:默认值。浏览器直接请求资源。

    2.FORWARD:转发访问资源

    3.INCLUDE:包含访问资源

    4.ERROR:错误跳转

    5.ASYNC:

  • 相关阅读:
    Div在BOdy中居中
    c_lc_填充每个节点的下一个右侧节点指针 I~II(递归)
    c_pat_哈密顿回路 & 最大点集 & 是否是旅行商路径 & 欧拉路径 & 最深的根(邻接矩阵存图)
    c_lc_二叉搜索树的最近公共祖先 & 二叉树的最近公共祖先(利用性质 | 从p,q开始存储每个结点的父亲)
    c_pat_树题大杂烩(利用性质)
    现在的我,理解了这种「激情」
    b_pat_排成最小的数字 & 月饼(字符串拼接比较a+b<b+a)
    c_lc_二叉搜索树中的众数(中序遍历+延迟更新前驱结点)
    b_pat_分享 & 链表排序 & 链表去重(链表模拟)
    b_pat_弹出序列(栈模拟)
  • 原文地址:https://www.cnblogs.com/LoganChen/p/12289840.html
Copyright © 2011-2022 走看看