java 笔记 - javaWeb 核心 3 - Filter 和 Listener

接上一篇 java 笔记 - javaWeb 核心 2 - Request 和 Response

一、Filter

当几个或者全部的 servlet 需要执行某个公共逻辑的时候,可以使用Filter。当访问 servlet 资源的时候程序会先执行匹配到的filter,然后再去执行这个 servlet 的逻辑,同样也可以在filter放行资源后执行某些通用逻辑

image.png

(1)Filter 快速入门

image.png
package com.test.web.filter;

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

// 过滤器
@WebFilter("/*")
public class filterDemo implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("请求所有资源前被 filter 拦截了...");
        // 放行资源
        filterChain.doFilter(servletRequest, servletResponse);

        System.out.println("请求所有资源后被 filter 拦截了...");
    }

    @Override
    public void destroy() {

    }
}

(2)Filter 执行流程

image.png

(3)Filter 使用细节

  • 1.Filter 拦截路径配置
image.png
  • 2.过滤器链
image.png

filter 应用场景demo:

image.png

image.png

未登录就能访问的资源直接放行


image.png

二、Listener

监听器就是监听某些操作,当这个操作被触发了就会执行对应的监听器,类似 js 的 eventListener。

image.png

目前监听器用得不多,基本只会用ServletContextListener,这个代表web应用被加载成功:

package com.test.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ListenerDemo implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 加载资源
        System.out.println("java web应用启动了...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        // 释放资源
        System.out.println("java web应用销毁了...");
    }
}

image.png

参考:黑马 javaWeb 教程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容