IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Filter过滤器笔记 -> 正文阅读

[大数据]Filter过滤器笔记

概念:对访问的目标资源的请求和响应进行拦截, web中的过滤器:当服务访问资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。


?过滤器的作用:一般用于完成通用的操作,如登录验证、统一编码处理、敏感字过滤等

1.创建拦截器流程
? ? 1.实现 javax.servlet.Filter接口
? ? 2.重写 init、doFilter、destroy方法
? ? 3.配置拦截路径
? ? ? ? 1使用web.xml配置
? ? ? ? 2.使用注解配置

package com.xiaoqiang.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//@WebFilter("/*") // 注解配置 "/*"代表拦截所有请求
public class FiirstFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter被执行了。。。。。");
        filterChain.doFilter(servletRequest,servletResponse);//放行,继续执行请求
    }

    @Override
    public void destroy() {

    }
}

web.xml添加过滤器

    <filter>
        <filter-name>demo</filter-name><!--filter 名称-->
        <filter-class>com.xiaoqiang.filter.FiirstFilter</filter-class><!--filter 执行类地址-->
    </filter>
    <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>/*</url-pattern><!--配置拦截地址,/*表示拦截所有请求-->
    </filter-mapping>

2.过滤器执行流程
? ? 1.拦截到servlet的请求
? ? ? ?在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest,处理request消息
? ? 2.处理请求
? ? ? ? 判断是否允许通过请求
? ? 3.拦截返回请求
? ? ? ? 拦截servlet到请求端的响应,处理response

3.filter的生命周期
? ? init:服务启动的时候调用init方法创建filter,只执行一次,用于加载资源
? ? doFilter:服务被访问的时候执行,执行多次,每次被调用均会执行,用于执行拦截的逻辑
? ? destroy:服务正常关闭的时候执行,只执行一次,用于释放资源

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("服务启动调用init方法创建filter。。。。。");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter被执行了。。。。。");
        filterChain.doFilter(servletRequest,servletResponse);//放行,继续执行请求
        System.out.println("请求返回了。。。。");
    }
    @Override
    public void destroy() {
        System.out.println("服务关闭调用destroy销毁filter。。。。。");
    }

4.拦截器路径配置

? ? ? ? 1.具体资源路径:只拦截配置的具体地址

? ? ? ? ? ? ? ? 例如:/index.jsp,只有访问index.jsp资源时才会被拦截

? ? ? ? 2.拦截目录:拦截配置的该路径的所有请求

? ? ? ? ? ? ? ? 例如:/user/*,访问路径包含 user的都会被拦截

? ? ? ? ?3.后缀名拦截:拦截含有固定后缀的请求

? ? ? ? ? ? ? ? 例如:/*.do,所有以.do结尾的请求都会被拦截

? ? ? ? ?4.拦截所有请求:/* 所有的请求都会被该拦截器请求

注解配置

@WebFilter("/*") // 注解配置 "/*"代表拦截所有请求
@WebFilter("*.do")//拦截以.do结尾的请求
@WebFilter("/user/*")//拦截user路径下的所有请求
@WebFilter("/index.jsp")//只拦截index.jsp

web.xml配置

<filter>
        <filter-name>demo</filter-name><!--filter 名称-->
        <filter-class>com.xiaoqiang.filter.FiirstFilter</filter-class><!--filter 执行类地址-->
    </filter>
    <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>/*</url-pattern><!--配置拦截地址,/*表示拦截所有请求-->
    </filter-mapping>
    <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>*.do</url-pattern><!--配置拦截地址,只拦截以.do结尾的请求-->
    </filter-mapping>
    <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>/user/*</url-pattern><!--配置拦截地址,拦截user路径下所有请求-->
    </filter-mapping>
    <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>/index.jsp</url-pattern><!--配置拦截地址,只拦截index.jsp-->
    </filter-mapping>

5.拦截不同方式请求的配置
? ? 1.默认 REQUEST:拦截直接请求资源的请求
? ? 2.FORWARD:拦截转发请求
? ? 3.INCLUDE:包含访问资源
? ? 4.ERROR:错误的跳转资源
? ? 6.ASYNC:异步访问资源

注解:

package com.xiaoqiang.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//当正常访问资源才会被拦截(默认的dispatchTypes)
//@WebFilter(value = "/index.jap",dispatcherTypes = DispatcherType.REQUEST)
//转发访问资源时才会被拦截
//@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.FORWARD)
//正常访问和转发到index.jsp都会被拦截的配置
//@WebFilter(value = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
//配置成 /* 正常请求会被拦截一次,转发时还会在被拦截一次
@WebFilter(value = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
public class TwoFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("DispatcherType.FORWARD...........");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

? ? ? ?web.xml

 <filter-mapping>
        <filter-name>demo</filter-name>
        <url-pattern>/index.jsp</url-pattern><!--配置拦截地址,只拦截index.jsp-->
        <dispatcher>FORWARD</dispatcher><!--拦截访问类型-->
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

6.过滤器链(多个过滤器执行顺序)

? ? ? ? 服务配置有多个过滤器是,请求时先执行的过滤器在返回时最后执行。

7.多个过滤器的执行顺序

? ? ? ? 1.注解配置:按照类名的字符串比较规则比较,值小的先执行

? ? ? ? ? ? ? ? 如AFilter 和Bfilter,就会先执行AFilter

? ? ? ? 2.web.xml:? filter-mapping定义在上边谁就先执行

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:20:17  更:2021-12-06 15:21:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:28:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码