当前位置: 首页 > 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:基于相似度的异常检测算法
  • Asm.js的简单介绍
  • DataBase in Android
  • HTTP请求重发
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript实现分页效果
  • Java到底能干嘛?
  • magento 货币换算
  • Python 反序列化安全问题(二)
  • React16时代,该用什么姿势写 React ?
  • spring-boot List转Page
  • Vue 重置组件到初始状态
  • Web设计流程优化:网页效果图设计新思路
  • 包装类对象
  • 简单易用的leetcode开发测试工具(npm)
  • 利用DataURL技术在网页上显示图片
  • 前端之Sass/Scss实战笔记
  • 如何使用 JavaScript 解析 URL
  • 手机端车牌号码键盘的vue组件
  • 算法-插入排序
  • 通过npm或yarn自动生成vue组件
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​linux启动进程的方式
  • (1)常见O(n^2)排序算法解析
  • (一)80c52学习之旅-起始篇
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转载)OpenStack Hacker养成指南
  • ***检测工具之RKHunter AIDE
  • .net core使用ef 6
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET运行机制
  • .NET中GET与SET的用法
  • /*在DataTable中更新、删除数据*/
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @requestBody写与不写的情况
  • @我的前任是个极品 微博分析
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [Android]使用Android打包Unity工程
  • [BZOJ1178][Apio2009]CONVENTION会议中心