首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >E022Web学习笔记-Filter和Listener

E022Web学习笔记-Filter和Listener

作者头像
訾博ZiBo
发布2025-01-06 14:43:56
发布2025-01-06 14:43:56
2620
举报

一、 Filter(过滤器)快速入门

1、过滤器简介

当访问服务器资源时,过滤器可以将请求拦截下来,完成一些特殊的功能;

2、过滤器的作用

一般用于完成通用的操作,如登录验证、统一编码处理、敏感字符的过滤;

3、快速入门

使用步骤:

第一步:定义一个类,实现接口Filter;

第二步:复写方法;

第三步:配置拦截路径;

代码语言:javascript
复制
注解配置方式:
1、过滤对所有资源的请求:
@WebFilter("/*")//访问所有资源之前都会执行该过滤器
2、过滤对特定资源的请求:
@WebFilter("/index.jsp")//访问index.jsp资源之前都会执行该过滤器

对请求放行的代码:
filterChain.doFilter(servletRequest, servletResponse);
快速入门代码演示:
代码语言:javascript
复制
package com.zibo.servlet.fliter;

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

@WebFilter("/*")//访问所有资源之前都会执行该过滤器
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter...");
        //放行
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

二、Filter细节

1、web.xml配置

代码语言:javascript
复制
<filter>
    <filter-name>myFilter</filter-name>
    <!--必须实现javax.servlet.Filter接口-->
    <filter-class>com.zibo.servlet.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <!--url-pattern是拦截路径-->
    <url-pattern>/*</url-pattern>
</filter-mapping>

2、过滤器执行流程

代码语言:javascript
复制
请求的时候 : 执行放行上面的代码
响应的时候 : 执行放行下面的代码

3、过滤器生命周期方法

4、过滤器配置详解

拦截路径配置:
代码语言:javascript
复制
1、具体资源路径:/index.jsp,只有访问index.jsp时过滤器会执行;(使用较少)
2、目录拦截:/user/*,访问user目录下的资源都会被过滤;
3、后缀名拦截:*.jsp,意思是访问jsp资源的时候执行过滤器;
4、拦截所有资源:/*
拦截方式配置:资源被访问的方式
代码语言:javascript
复制
1、注解配置:
设置dispatcherTypes属性,取值:
①REQUEST:默认值,浏览器直接请求资源;
②FORWORD:转发访问资源;
③INCLUDE:包含访问资源;
④ERROR:错误跳转资源;
⑤ASYNC:异步访问资源;

2、web.xml配置:
设置<dispatcher></dispatcher>标签即可,取值也是上面五种取值;

5、过滤器链(配置多个过滤器)

执行顺序:

请求时:A --> B --> C

响应时:C --> B --> A

过滤器先后顺序问题:
代码语言:javascript
复制
注解配置:按照字符串字符顺序比较,靠前的先执行;
举例:
AFilter与BFilter,AFilter先执行;
AFilter6与AFilter17,AFilter17先执行;

web.xml配置:<filter-mapping>谁定义在上面谁先执行;

三、Listener监听器

1、概念

web三大组件之一;

2、事件监听机制

代码语言:javascript
复制
1、事件;
2、事件源:事件发生的地方;
3、监听器:一个对象;
4、注册监听:将事件、事件源、监听器绑定在一起;

当事件在事件源上发生时指定监听器代码;

3、ServletContextListener接口

作用:

监听ServletContext对象的创建和销毁;

代码语言:javascript
复制
void contextInitialized(ServletContextEvent sce):
ServletContext创建时调用此方法;
void contextDestroyed(ServletContextEvent sce):
ServletContext销毁前时调用此方法;
实现监听器步骤:

第一步:定义一个类,实现ServletContextListener接口;

第二步:复写方法;

第三步:配置;

监听器代码演示:

MyServletContextListener:

代码语言:javascript
复制
package com.zibo.servlet.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //一般的用途:加载资源文件
        //1、获取ServletContext对象
        ServletContext servletContext = sce.getServletContext();
        //2、加载资源文件
        String config = servletContext.getInitParameter("contextConfigLocation");
        //3、获取真实路径
        String realPath = servletContext.getRealPath(config);
        //4、加载进内存
        try {
            FileInputStream fis = new FileInputStream(realPath);
            //只要这里打印成功,就说明加载到资源文件了
            System.out.println(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("ServletContext创建...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext销毁...");
    }
}

web.xml文件配置(加载资源文件):

代码语言:javascript
复制
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml<param-value>
</context-param>

applicationContext.xml位置图:

web.xml配置:
代码语言:javascript
复制
<listener>
    <listener-class>这里写接听器实现类的全类名</listener-class>
</listener>
注解配置方法:
代码语言:javascript
复制
//在自定义的ServletContextListener接口实现类加上@WebListener即可
@WebListener
public class MyServletContextListener implements ServletContextListener{
    //...
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 Filter(过滤器)快速入门
    • 1、过滤器简介
    • 2、过滤器的作用
    • 3、快速入门
      • 使用步骤:
      • 快速入门代码演示:
  • 二、Filter细节
    • 1、web.xml配置
    • 2、过滤器执行流程
    • 3、过滤器生命周期方法
    • 4、过滤器配置详解
      • 拦截路径配置:
      • 拦截方式配置:资源被访问的方式
    • 5、过滤器链(配置多个过滤器)
      • 执行顺序:
      • 过滤器先后顺序问题:
  • 三、Listener监听器
    • 1、概念
    • 2、事件监听机制
    • 3、ServletContextListener接口
      • 作用:
      • 实现监听器步骤:
      • 监听器代码演示:
      • web.xml配置:
      • 注解配置方法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档