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

Filter&Listener

JavaWeb三大组件:Servlet、Filter、Listener

Filter

过滤器,用来过滤网站的数据,如处理中文乱码、登录验证等。

开发步骤

1、定义类,实现Filter接口,重写其所有方法
package com.louis.filter;


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

/**
 * @author XRY
 * @date 2023年05月12日20:57
 */

public class FilterDemo01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }
}

需要注意的是在类库中有很多类名为Filter的类,我们需要导入下面的类:

在这里插入图片描述

2、配置Filter拦截资源的路径

在类上定义@WebFilter注解或在web.xml中配置。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

  <filter>
    <filter-name>/test</filter-name>
    <filter-class>com.louis.filter.FilterDemo01</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>/test</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <display-name>Archetype Created Web Application</display-name>
</web-app>
3、在doFilter方法中将过滤器放行
@Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("FilterDemo...");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

执行逻辑:执行放行前逻辑---->放行---->访问资源---->执行放行后的逻辑。放行前对request数据进行处理,放行后对response的数据进行处理。

Filter使用细节

Filter拦截路径配置

Filter可以根据使用的场景及细节,配置不同的资源拦截路径。@WebFilter(“/*”)

  • 拦截具体的资源:/index.jsp,只访问index.jsp时才会被拦截
  • 目录拦截:/user/*,访问/uder下的所有资源,都会被拦截
  • 后缀名拦截:.jsp,访问后缀名为jsp的资源,都会被拦截
  • 拦截所有:/*,访问所有资源,都会被拦截
过滤器链

一个web应用,可以配置多个过滤器,多个过滤器称为过滤器链。

其中的顺序为:

执行 Filter1 的放行前逻辑代码----->执行 Filter2 的放行前逻辑代码----->访问到资源----->执行 Filter2 的放行后逻辑代码----->执行 Filter1 的放行后逻辑代码

Listener

监听器(Listener)可以监听在application,session, request三大对象创建、销毁或者往其中添加删除的属性的自动执行代码块的功能组件。

开发步骤

1、实现监听器接口
package com.louis.listen;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @author XRY
 * @date 2023年05月10日12:44
 */

//统计在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {
    //创建session监听:看你的一举一动
    //一旦创建session就会触发一次
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer onlineCount = (Integer)context.getAttribute("OnlineCount");
        if(onlineCount == null){
            onlineCount = 1;
        }else{
            int count = onlineCount.intValue();
            onlineCount = count +1;
        }
        context.setAttribute("onlineCount", onlineCount);
    }


    //销毁session监听
    //一旦销毁session就会触发这个事件
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer onlineCount = (Integer)context.getAttribute("OnlineCount");
        if(onlineCount == null){
            onlineCount = 0;
        }else{
            int count = onlineCount.intValue();
            onlineCount = count - 1;
        }
        context.setAttribute("onlineCount", onlineCount);
    }
}
2、配置监听器
  <listener>
    <listener-class>com.louis.listen.OnlineCountListener</listener-class>
  </listener>

种类

JavaWeb提供了8个监听器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值