首頁 > 軟體

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

2022-02-28 19:01:47

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過濾器的四種攔截方式


總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容! 


IT145.com E-mail:sddin#qq.com