柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

    • Tomcat
    • JavaWeb Servlet
    • JSP
    • 过滤监听器
      • 过滤器 filter
        • 应用步骤
        • 过滤器注解说明
        • 过滤器执行过程
        • 过滤器声明周期
        • 应用场景
        • SpringBoot应用
      • 监听器 Listener
      • 应用测试
    • 会话跟踪
    • MVC设计模式
    • Ajax
    • JSON
    • JspSmartUpload应用
  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • JavaWeb
柏竹
2020-02-18
目录

过滤监听器

# 过滤器 filter

过滤器是对web资源进行拦截,做⼀些处理后再交给下⼀个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理

# 应用步骤

  1. 添加 servlet jar依赖包

  2. 创建对象类 应用 javax.servlet.Filter接口 ,并重写里面所有方法

  3. 配置 url 的访问入口,有两种方式 web.xml / @WebFilter

    web.xml 文件配置

    <filter>
        <filter-name>过滤器映射名</filter-name>
        <filter-class>类路径</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>过滤器映射名</filter-name>
        <url-pattern>请求url</url-pattern>
    </filter-mapping>
    

    @WebFilter 注解配置

    @WebFiler("...")
    public class MyFilter implements Filter {...}
    
  4. 自定义过滤 约束 配置

  5. 回调servlet/转接过滤器 ,在 doFileter() 添加以下代码

    filterChain.doFilter(Request , Response);
    

# 过滤器注解说明

@WebFilter 注解配置

属性 值 [默认值] 说明
description String [""] 描述
displayName String [""] 显示名称
initParams WebInitParam[] [{}] 初始化参数
filterName String [""] 过滤器名称
value String[] [{}] 过滤地址url
urlPatterns String[] [{}] 网址模式
dispatcherTypes DispatcherType[] [REQUEST] 拦截形式
asyncSupported Boolean [false] 异步支持
拦截形式 说明
FORWARD 转发访问资源
INCLUDE 包含访问资源
REQUEST 请求资源
ASYNC 异步访问资源
ERROR 错误跳转资源

# 过滤器执行过程

  1. 客户端发出Web请求,如果 过滤器与此地址匹配,则会优先进入过滤器
  2. 请求会进入到 doFilter()方法,进行代码逻辑处理
  3. 调用 chain.doFilter()方法 放行请求,否则会拦截请求
  4. 请求通过后,响应回来依旧需要经过 过滤器

注意:

  • 过滤器执行是同步的,因此 chain.doFilter()方法 之前是 请求处理的范围 ,则之后为 响应处理的范围
  • 如果过滤器有多个,会依次执行所有匹配url的过滤器才能获取Web资源

# 过滤器声明周期

  1. init() : 在服务器启动后,会创建 Filter对象 ,然后 调用 init()方法 ,只会执行一次
  2. doFilter() : 每次请求地址匹配都会拦截请求
  3. destroy() : 在服务器关闭后,Filter对象被销毁 ,然后执行 destroy()方法 (前提需要在正常关闭情况下

注意: init() / destroy() 方法 一般用于 初次加载/释放资源 的情况

# 应用场景

  • 防止用户未登陆访问资源
  • 设置统一编码类型
  • 加密、解密
  • 过滤非法文字
  • 下载资源的限制
  • ...

# SpringBoot应用

大致过程

  1. 引入 sprintg-start-web 依赖应用
  2. 创建自定义类 继承 Filter 并实现所有方法
  3. 注册加载过滤器

SpringBoot架构注册过滤器方式

  1. 采用 @WebFilter注解

    @Configuration
    public class FilterConfig {
        @Bean
        @WebFilter(filterName = "myFilter", urlPatterns = "/*")
        public MyFilter myFilterBean() {
            return new MyFilter();
        }
    }
    
  2. 采用 FilterRegistrationBean类 注册Bean

    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean<MyFilter> myFilterBean() {
            FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>();
            registration.setFilter(new MyFilter());
            registration.addUrlPatterns("/*");
            return registration;
        }
    }
    

# 监听器 Listener

监听器是监听某个域对象的的状态变化的组件

事件源对象: request、 session、servletContext 监听状态: 创建、变化、销毁 **配置监听: ** 绑定与事件源的监听 **监听响应: ** 监听状态发生变化进行响应

监听器类型

接口 ServletContext HttpSession ServletRequest
监听对象 创建/销毁 ServletContextListener HttpSessionListener ServlerRequestListener
监听对象属性变化 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

对象周期和用意

  • ServletContext 服务器启动 -> 服务器关闭

    初始化对象、初始化数据(配置加载等信息)

  • Session request.getSession创建 -> 服务器关闭、超时销毁、手动销毁

    数据存取重要信息、网站记录数器 等。。。

  • Request 请求开始 -> 请求结束

    信息交互的存取

应用步骤

  1. 添加 servlet jar依赖包

  2. 创建对象类 应用 监听的接口 并重写事件处理的方法

  3. 配置 web.xml 文件/添加注释 @WebListener(以下配置用于监听器使用)

    <listener>
            <listener-class>类路径</listener-class>
    </listener>
    

点击了解监听器 (opens new window)

# 应用测试

点击个人项目应用测试 (opens new window)

上次更新: 2023/03/12, 00:43:49

← JSP 会话跟踪→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式