接上一篇 java 筆記 - javaWeb 核心 2 - Request 和 Response
一、Filter
當(dāng)幾個(gè)或者全部的 servlet 需要執(zhí)行某個(gè)公共邏輯的時(shí)候,可以使用Filter。當(dāng)訪問 servlet 資源的時(shí)候程序會先執(zhí)行匹配到的filter,然后再去執(zhí)行這個(gè) servlet 的邏輯,同樣也可以在filter放行資源后執(zhí)行某些通用邏輯。
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 執(zhí)行流程
image.png
(3)Filter 使用細(xì)節(jié)
- 1.Filter 攔截路徑配置
image.png
- 2.過濾器鏈
image.png
filter 應(yīng)用場景demo:
image.png
image.png
未登錄就能訪問的資源直接放行
image.png
二、Listener
監(jiān)聽器就是監(jiān)聽某些操作,當(dāng)這個(gè)操作被觸發(fā)了就會執(zhí)行對應(yīng)的監(jiān)聽器,類似 js 的 eventListener。
image.png
目前監(jiān)聽器用得不多,基本只會用ServletContextListener,這個(gè)代表web應(yīng)用被加載成功:
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應(yīng)用啟動了...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// 釋放資源
System.out.println("java web應(yīng)用銷毀了...");
}
}
image.png









