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的更多內容!
推薦閱讀:
- Java Web Listener實現事件監聽與處理
- Java實現統計在線人數功能的方法詳解
- 詳細瞭解java監聽器和過濾器
- Java Session會話追蹤原理深入分析
- SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener)