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:

  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/LoganChen/p/12289840.html
Copyright © 2011-2022 走看看