JavaWeb的監聽器和過濾器你瞭解嗎

1.監聽器—->Context,Session

what is listener?

監聽器是一個接口內容由我們實現,會在特定時間被調用,監聽器用於監聽web應用中三大域對象(request,session,application),信息的創建,銷毀,增加,修改,刪除等動作的發生,然後做出相應的響應處理。當范圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。常用於統計在線人數和在線用戶,系統加載時進行信息初始化,統計網站的訪問量等。

ContextListener通過實現ServletContextListener來進行全局監聽

ContextListener可以通過記錄用戶訪問網站的次數思路:用戶通過訪問index.jsp,來獲取存放在監聽器中的hashmap< String,Integer>,然後在index.jsp中進行判斷。

ContextListener的代碼思路如下:

public class ContextListener1 implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("init");
        //創建map集合
        Map<String, Integer> map = new HashMap<String, Integer>();
        //    獲取全局對象
        ServletContext context = servletContextEvent.getServletContext();
        context.setAttribute("map", map);
        System.out.println(map.isEmpty());
        System.out.println(map);
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("destory");
    }
}

index.jsp的代碼思路如下:

<%
    //獲取用戶ip地址
    String ServerName = request.getServerName();
    //獲取全局對象
    Map<String, Integer> map = (Map<String, Integer>) application.getAttribute("map");
    if (map.containsKey(ServerName)) {
        map.put(ServerName, map.get(ServerName) + 1);
    } else {
        map.put(ServerName, 1);
    }
    int count = map.get(ServerName);
    int size = map.size();
%>
<h4>ip地址是:<%=ServerName%>,您是第<%=count%>位訪問的用戶,當前服務器共被<%=size%>個用戶訪問過</h4>

2.監聽器三大作用域

在這裡插入圖片描述

在這裡插入圖片描述

3.屬性監聽器

屬性監聽器主要監聽屬性值的變化,例如request.setAttribute()等這些數據的變化。

package listener;
import javax.servlet.*;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
 * @author wjs
 * @create 2022-02-27 15:09
 */
public class AttrListener implements ServletContextAttributeListener, ServletRequestAttributeListener, HttpSessionAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
    //    向全局作用域中添加值的監聽器
    }
    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
    //    向全局作用域刪除值的監聽器
    }
    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
    //    向全局域對象修改值的監聽器
    }
    @Override
    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
    //    向request域中添加值的監聽器
    }
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
    //    向request域中刪除值的監聽器
    }
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
    //    向request域中修改值的監聽器
    }
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
    //    向session域中添加值的監聽器
    }
    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
    //    向session域中刪除值的監聽器
    }
    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
    //    向session域中修改值的監聽器
    }
}

4.過濾器

在這裡插入圖片描述

4.1過濾器的使用

1.編寫java	類實現Filter接口
2.重寫doFilter()方法
3.設置攔截的url

4.2過濾器的攔截路徑

/*:根目錄下所有請求都攔截

/*.do:所有帶.do的請求都攔截

/*.jsp

4.3過濾器的攔截順序

過濾器的攔截順序,取決於在配置文件web.xml的先後順序

4.4過濾器的四種攔截方式

在這裡插入圖片描述
在這裡插入圖片描述

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容! 

推薦閱讀: