Java 監聽器

1: 監聽器的定義

2:監聽器的用途

3:實例

4:監聽器分類

5:Servlet3.0下監聽器的使用

6:實際項目經常使用的案例

 

1: 監聽器的定義:java

監聽器其實是一個類,這個類實現了特定的接口,而後將這個類在 web.xml 文件中進行描述,這樣服務器在啓動的時候就能夠實例化這個類,啓動監聽器。當範圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。例如統計用戶在線人數。web

web監聽器是Servlet規範中定義的一種特殊類,用於監聽ServletContext,HttpSession,ServletRequest等域對象的建立、銷燬、以及屬性的變化等,能夠在事件發生前、發生後進行一些處理。服務器

 

 

二、監聽器的用途session

  • 一、統計在線人數和在線用戶
  • 二、系統加載時進行信息的初始化工做
  • 三、統計網站的訪問量
  • 四、跟Spring結合

 

三、實例函數

在web.xml文件中進行配置網站

listenr-class中是本身定義的Listener的類路徑spa

public class MyRequestListener implements ServletContextListener{
	public void contextInitialized(ServletContextEvent event){
		System.out.println("啓動監聽器");
	}

	public void contextDestroy(ServletContextEvent event){
		System.out.println("結束監聽器");
	}
}

編譯器會爲咱們自動生成contextInitialized和contextDestroy兩個函數3d

監聽器>過濾器>serlvet,在 web.xml 文件中配置的時候注意順序xml

 

4 監聽器的分類對象

按監聽的對象劃分,能夠分爲監聽

  • ServletContext對象
  • HttpSession對象
  • ServletRequest對象

按監聽的事件劃分

  • 域對象自身的建立和銷燬
  • 域對象中屬性的建立和消除
  • 綁定到session中的某個對象的狀態

因爲不少監聽的方式一致,所以咱們只考慮其中的HttpSession對象:

在web.xml中配置session超時

<session-config>
    <session-timeout> 30 </session-timeout>
</session-config>

當超過30秒後,session會自動過時

public class MyRequestListener implements HttpSessionListener{
	public void sessionCreate(HttpSessionEvent event){
		System.out.println("event 建立:");
	}

	public void sessionDestroy(HttpSessionEvent event){
		System.out.println("event 銷燬:");
	}
}

另外,咱們能夠實現HttpSessionAttributeListener來實現session對象屬性的增長(added)、刪除(removed)、替換(replaced)的功能

public class MyRequestListener implements HttpSessionAttributeListener{
	public void attributeAdded(HttpSessionBindEvent event){
		
	}

	public void attributeRemoved(HttpSessionBindEvent event){
		
	}

	public void attributeReplaced(HttpSessionBindEvent event){
		
	}
}

五、Servlte3.0下的使用

在Servlet3.0下經過註解@WebListener("")就能夠實現了,不須要在web.xml中進行配置

六、實戰

public class MyRequestListener implements HttpSessionListener{
	private int counts = 0;//用於統計在線人數
	public void sessionCreate(HttpSessionEvent event){
		counts++;
		event.getSession().getServletContext.setAttribute("name",counts); //用戶人數+1
	}

	public void sessionDestroy(HttpSessionEvent event){
		counts--;
		event.getSession().getServletContext.setAttribute("name",counts);//用戶人數-1
	}
}

@WebListener
public class MyRequestListener2 implements ServletRequestListener{
	private ArrayList<User>list; //建立一個在線用戶的列表
	public void requestCreate(ServletRequestEvent event){
		HttpServletRequest request = (HttpServletRequest) request.getServletContext();
		String sessionId = request.getSession().getSessionId();
		if(sessionId ...){
			....
			list.add(...);
		}
	}

	public void requestDestroy(ServletRequestEvent event){

	}
}

public class User{
	private int sessionId;
	
}

注意,以上代碼只是大體的代碼,並不全面和正確。

 

參考:java Web開發技術應用 - 監聽器

相關文章
相關標籤/搜索