当前位置: 首页 > news >正文

(过滤器)Filter和(监听器)listener

过滤器 Filter

Filter是什么?

  • JavaWeb的一个重要组件,可以对发送到servlet的请求进行拦截过滤,也可以对响应进行拦截

  • Filter是实现了Filter接口的Java类

  • Filter需要在web.xml中进行注册,也可以通过注解来注册。

如何创建一个Filter—只需要创建一个类,实现Filter接口即可。

字符集的过滤器

package afternoon.filter;
​
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
    字符编码集的过滤器
    过滤拦截什么请求?
 */
@WebServlet
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
​
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
​
        //放行
        filterChain.doFilter(servletRequest, servletResponse);
        
        /*
            给response添加响应头,text/html,后台向前台输出字符串的时候
            当后台向前台输出的是json串的格式时,不需要设置这个。
         */
        response.addHeader("content-type","text/html;charset=utf-8");
    }
}

监听器 listener

专门用于对其他对象身上发生的事件或状态改变进行监听和响应的处理

主要监听作用域的对象的改变

监听器监听的是域对象,不是监听对象的某个地址

JavaEE(servlet)三大件

servlet、filter、listener

监听器的分类

  • 监听域对象自身的创建和销毁

package afternoon.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
    监听域对象自身的创建和销毁
 */
public class HelloListener implements HttpSessionListener, ServletRequestListener, ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContextListener.super.contextInitialized(sce);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        ServletRequestListener.super.requestDestroyed(sre);
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        ServletRequestListener.super.requestInitialized(sre);
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSessionListener.super.sessionCreated(se);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSessionListener.super.sessionDestroyed(se);
    }
}
  • 监听域对象中属性的增加和删除

package afternoon.listener;
​
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/*
    监听域对象中属性的增加和删除
 */
​
@WebListener
public class HelloAttributeListener implements ServletContextAttributeListener, ServletRequestAttributeListener, HttpSessionAttributeListener {
​
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeAdded(scae);
    }
​
    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeRemoved(scae);
    }
​
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeReplaced(scae);
    }
​
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeAdded(srae);
    }
​
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeRemoved(srae);
    }
​
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeReplaced(srae);
    }
​
    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeAdded(se);
    }
​
    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeRemoved(se);
    }
​
    @Override
    public void attributeReplaced(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeReplaced(se);
    }
}
​
  • 监听绑定到session中的某个对象的状态的事件监听

package afternoon.listener;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;

/*
    监听绑定到session中的某个对象的状态的事件监听
 */
public class HelloSessionListener implements HttpSessionActivationListener {


    //在钝化之前被调用
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
        HttpSessionActivationListener.super.sessionWillPassivate(se);
    }

    //在活化之后被调用
    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        HttpSessionActivationListener.super.sessionDidActivate(se);
    }

    /*
        活化:从磁盘中读取session对象
        钝化:向磁盘中写入session对象
     */
}

活化:从磁盘中读取session对象

钝化:向磁盘中写入session对象

@WebListener注解加上以后才可以监听域对象

配置监听器

  • 注解

@WebListener
  • XML配置

<listener>
        <listener-class>afternoon.listener.HelloListener</listener-class>
    </listener>

相关文章:

  • Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?
  • Vue项目流程7,交易页面,提交订单,支付页面,利用element UI 以及 QRCode 完成微信支付,弹出框按钮的相关工作,个人中心以及子路由我的订单
  • 在Java中使用SFTP传输文件
  • OC5860降压芯片,MPS2459脚位一样,节省肖特基规格书
  • 哈工大李治军老师操作系统笔记【4】:系统调用的实现(Learning OS Concepts By Coding Them !)
  • 【光学】基于matlab色散曲线拟合【含Matlab源码 2053期】
  • (多级缓存)多级缓存
  • 复习三:线性表
  • C/C++语言100题练习计划 87——火柴棒等式(枚举实现)
  • 数仓架构演进
  • 约瑟夫问题对应算法的实现(思路分析) [Java][数据结构]
  • 深圳市第十二届职工技术创新运动会暨2022年深圳技能大赛—集成电路应用开发职业技能竞赛
  • 携职教育:对于想进入财务工作的人来说,第一个证考CPA还是CMA?
  • PostgreSQL 创建数据库、创建用户、赋予权限、创建表、主键总结
  • SynchroTrap:基于相似度的异常检测算法
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • co.js - 让异步代码同步化
  • egg(89)--egg之redis的发布和订阅
  • es6--symbol
  • Git 使用集
  • Hibernate【inverse和cascade属性】知识要点
  • JAVA多线程机制解析-volatilesynchronized
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mysql外键的使用
  • Phpstorm怎样批量删除空行?
  • Python中eval与exec的使用及区别
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从零开始学习部署
  • 近期前端发展计划
  • 警报:线上事故之CountDownLatch的威力
  • 开源地图数据可视化库——mapnik
  • 浏览器缓存机制分析
  • 漂亮刷新控件-iOS
  • 前端性能优化——回流与重绘
  • 三栏布局总结
  • 因为阿里,他们成了“杭漂”
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • Android开发者必备:推荐一款助力开发的开源APP
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​flutter 代码混淆
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)创业的注意事项
  • ***通过什么方式***网吧
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .gitignore文件_Git:.gitignore
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖