首页 > 编程语言 >JavaWed过滤器和监听器(知识回顾+详解)

JavaWed过滤器和监听器(知识回顾+详解)

时间:2024-07-26 08:56:54浏览次数:16  
标签:count JavaWed session request application 详解 监听器 过滤器 public

过滤器  Filter

   1.1 概念

       在浏览器和目标资源之间进行过滤的中间组件。

       请求到达目标资源之前进行过滤。

       响应到达浏览器之前进行过滤。

   1.2 定义过滤器的步骤

      1. 写一个java类,实现Filter接口

    public class FirstFilter implements Filter {
    /**
     * 初始化方法
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("FirstFilter初始化的方法....");
    }

    /**
     * 处理过滤请求的方法
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FirstFilter请求到达目标资源之前执行....");
        //放行
        filterChain.doFilter(request,response);
        System.out.println("FirstFilter响应到达浏览器之前在执行....");
    }

    /**
     * 销毁方法
     */
    @Override
    public void destroy() {
        System.out.println("FirstFilter的销毁的方法...");
    }

   2、 配置哪些目标资源需要经过过滤器 (两种方式)

      1. web.xml进行配置

<filter>
    <filter-name>firstFilter</filter-name>
    <filter-class>filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>firstFilter</filter-name>
    <!--配置路径:指定哪些目标资源经过过滤器-->
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

     2. 在类上使用注解方式进行配置

@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
public class FirstFilter implements Filter {

}

  

  1.3 执行原理 (生命周期)

     1. 服务器启动时,加载web.xml以及扫描@WebFilter注解,

创建filter对象,调用init()进行初始化(执行1次)

     2. 请求过滤器过滤的目标资源,调用doFilter()方法 (执行多次)。

        如果遇到filterChain.doFilter(request,response);则进行放行,

进入下一个过滤器或目标资源。

    3.服务器停止时,调用destroy()销毁方法(执行1次)

  

  1.4 过滤器链

     过滤器链:由多个过滤器组成。

执行顺序:web.xml配置方式,与<filter-mapping>配置顺序有关,在前面的先执行。

         @WebFilter注解方式,顺序按照过滤器名称字母字典顺序一次执行.

如AFilter比BFilter先执行。

    核心代码:filterChain.doFilter(request,response);放行进入下一个过滤器或目标资源。

  

  1.5 典型应用

      1. 设置统一字符编码

      2. 登录验证

      3. 敏感字符的替换

监听器  Listener

   1. 概念

      监听域对象的创建和销毁

      监听域对象的属性操作。(增加、修改、删除)

   2. 分类

      监听域对象的创建和销毁

        ServletRequestListener

        HttpSessionListener

        ServletContextListener

      监听域对象的属性操作

        ServletRequestAttributeListener

        HttpSessionAttributeListener

        ServletContextAttributeListener

   3. 典型应用

      1. 统计在线人数

   4. 统计在线人数实现步骤

      1. 创建一个Listener监听器的类,监听session创建和销毁。实现HttpSessionListener

/**
 * 监听session的创建
 */
@WebListener
public class OnlineNumListener implements HttpSessionListener{

    public OnlineNumListener() {
    }
    /**
     * 监听session对象创建调用,在线人数+1
     */
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext application=se.getSession().getServletContext();
        if(application.getAttribute("count")!=null){
            int count =(int)application.getAttribute("count");
            application.setAttribute("count",count+1);
        }else{
            application.setAttribute("count",1);
        }
    }
    /**
     * 监听session销毁调用,在线人数-1
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext application=se.getSession().getServletContext();
        int count =(int)application.getAttribute("count");
        application.setAttribute("count",count-1);
    }
}

   2. 编写jsp页面展示在线人数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
     <h2>在线人数:${count}</h2>
     <a href="exitServlet">退出</a>
  </body>
</html>

  3. 退出

@WebServlet(name = "ExitServlet", value = "/exitServlet")
public class ExitServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session=request.getSession();
        //销毁session
        session.invalidate();
    }
}

标签:count,JavaWed,session,request,application,详解,监听器,过滤器,public
From: https://blog.csdn.net/shdhdj2838/article/details/140697627

相关文章

  • leetcode103. 二叉树的锯齿形层序遍历,简单易懂附代码详解
    leetcode103.二叉树的锯齿形层序遍历给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例2:输入:root=[1]输出:[[1......
  • Springboot 的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期-面试热点-x
    文章目录Springboot的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期为什么要知道Bean的生命周期Bean的生命周期之五步堆栈信息:代码验证执行结果为Bean生命周期之七步执行结果Bean生命周期之十步增加的三步测试代码如下:执行结果:Bean的生命周期总结其他......
  • Android开发 - Canvas类与Paint画笔的绘制详解与使用
    Canvas类是什么Android中Canvas类常用于自定义View等操作中,Canvas则如同一张画布可以在上面绘制内容,然后这张画布也可以叠加其他的图层或者平移旋转等操作。Canvas对象的获取方式有两种:一种我们通过重写onDraw方法,View中重写onDraw(Canvascanvas)Canvas对象会被当做参数传递过......
  • Android开发 - Canvas中Path路径的详解与使用
    Path回顾Path类封装复合(多轮廓)几何路径由直线段、二次曲线和三次曲线组成。它可以用画布绘制:canvas.drawPath(path,paint),填充或笔划(基于绘画的样式),或者可以用于剪裁或绘制路径上的文本。Path既是路径,路径走多了就变成一种套路,只要我们会解套,那这种套路就是高速公路。路径走完形......
  • 数据结构之队列详解
    1.队列的概念以及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFo(FristinFristout)的特性入队列:进行插入才操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列也可以使用数组和链表的结构实现,使用......
  • Profinet转ModbusTCP网关模块的配置与应用详解
    Profinet转ModbusTCP网关模块的配置与应用详解Profinet转ModbusTCP网关模块(XD-ETHPN20)是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过使用Profinet转ModbusTCP网关模块(XD-ETHPN20)将Profinet协议转换成ModbusTCP协议,实现了不同网络之间的互联互通。这种网关设备......
  • pdf文件压缩的有效方法,详解5个效果高效的文件压缩方法汇总!
    在现代信息社会中,PDF文件已经成为我们日常工作和学习中不可或缺的重要载体。然而,随着PDF文件内容的增多和复杂化,文件大小的膨胀也成为一个常见问题,给存储、共享和传输带来了不少挑战。本文旨在探讨如何通过有效的压缩方法来解决pdf文件过大的问题。我们将详细介绍五种高效......
  • 一文彻底搞懂浏览器事件机制、事件委托、事件冒泡、事件循环、Event Loop、react事件
    一、事件是什么?事件模型?事件是用户操作网页时发生的交互动作,比如click/move,事件除了用户触发的动作外,还可以是文档加载,窗口滚动和大小调整。事件被封装成一个event对象,包含了该事件发生时的所有相关信息(event的属性)以及可以对事件进行的操作(event的方法)。事件是用......
  • 黑暗之魂2缺失steam_api.dll该如何处理?全面解读《黑暗之魂2》steam_api.dll丢失及高效
    在游戏的世界中,《黑暗之魂2》凭借其独特的魅力吸引了众多玩家。然而,有时玩家会遭遇steam_api.dll文件丢失的困扰,这无疑给游戏体验带来了极大的阻碍。在这篇文章中,我们将为您进行全面解读。首先深入剖析steam_api.dll文件丢失的原因。可能是由于游戏安装过程中的错误、系统更新......
  • 【C++】再探构造函数 - 初始化列表详解
    ......