2.13 初识监听器 过滤器

本文介绍了Java Web中的监听器和过滤器。监听器用于监控HTTP会话的创建与销毁,常用于资源加载与释放、初始化数据库连接池等场景。过滤器则在Servlet执行前后介入,实现字符编码控制、访问权限校验等功能,可以按需配置多个并应用到不同请求路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.13 初识监听器 过滤器

1.监听器

package com.javasm.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class MyListener1 implements HttpSessionListener {
    /*
    * listener  监控域对象
    * request
    * session
    * servletContext
    *
    * requestAttribute
    * sessionAttribute
    * servletContextAttribute
    *
    * 典型场景
    * 服务器启动时 加载第三方资源 服务器关闭时 销毁第三方资源
    * 服务器启动时 初始化数据库连接池
    * 服务器关闭时 关闭数据库连接池
    * */

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session被创建了");
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("session监听器中输出:"+session.getId());

    }
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("session被销毁了 被销毁的sessionid是:"+session.getId());
    }
}

2.过滤器

package com.javasm.filter;

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

@WebFilter("/*")
public class MyFilter1 implements Filter {
/*
* filter 过滤器
* 与sevlet相似
* 可以在servlet之前执行代码段
* 1.如果与serlvet配置相同地址 先执行filter (filterChain.doFilter(req,resp)) 再执行serlvet
* 2.服务器启动时 filter实例创建  当有请求访问到对应过滤器时 过滤器执行  当服务器关闭时 filter实例销毁
* 3.可以在同一个地址配置多个过滤器
* 4.通过通配符* 可以在多个servlet前配置同一个Filter
*   /* 总过滤器       所有的网络请求都会经过过滤器
*   /user/* 模块过滤器
*   /demo1  针对某一个servlet精准过滤
*
  5.典型场景
    a.字符编码控制
    b.访问控制  (登录访问控制 粒度  权限访问控制  细粒度)
* */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器被创建了");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器1被执行了");//
        //字符编码过滤 主要处理请求
        servletRequest.setCharacterEncoding("utf-8");
        //不要影响静态资源访问
        //不配置响应的方式

        //用户权限  访问地址
        //  /user  /order
        //用户登录时 把权限列表从数据库中查询出来 放入session中  从session中取出权限列表
        //获取用户当次访问地址  /test
        //匹配用户当次访问路径是否在权限列表中

/*        if(有权限){
            filterChain.doFilter(servletRequest,servletResponse);
        }else{
            通过输出告诉用户没权限
        }*/
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {
        System.out.println("过滤器被销毁了");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值