servlet監聽器實如今線人數統計

一.準備知識java

  1. servlet:servlet是一種運行服務器端的java應用程序,具備獨立於平臺和協議的特性,而且能夠動態的生成web頁面,它工做在客戶端請求與服務器響應的中間層。
  2. filter:filter是一個能夠複用的代碼片斷,能夠用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。
  3. listener:監聽器,從字面上能夠看出listener主要用來監聽只用。經過listener能夠監聽web服務器中某一個執行動做,並根據其要求做出相應的響應。通俗的語言說就是在application,session,request三個對象建立消亡或者往其中添加修改刪除屬性時自動執行代碼的功能組件。
  4. servlet:servlet的生命週期始於它被裝入web服務器的內存時,並在web服務器終止或從新裝入servlet時結束。servlet一旦被裝入web服務器,通常不會從web服務器內存中刪除,直至web服務器關閉或從新結束。
    (1)、裝入:啓動服務器時加載Servlet的實例;
    (2)、初始化:web服務器啓動時或web服務器接收到請求時,或者二者之間的某個時刻啓動。初始化工做有init()方法負責執行完成;
    (3)、調用:從第一次到之後的屢次訪問,都是隻調用doGet()或doPost()方法;
    (4)、銷燬:中止服務器時調用destroy()方法,銷燬實例。
  5. filter:(必定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)。
    (1)、啓動服務器時加載過濾器的實例,並調用init()方法來初始化實例;
    (2)、每一次請求時都只調用方法doFilter()進行處理;
    (3)、中止服務器時調用destroy()方法,銷燬實例。
  6. listener:相似於servlet和filter
    web.xml 的加載順序是:context- param -> listener -> filter –> servlet

二.預備知識 
       經過ServletContext 的實例能夠存取應用程序的全局對象以及初始化階段的變量。 在JSP文件中,application 是 ServletContext 的實例,由JSP容器默認建立。Servlet 中調用 getServletContext()方法獲得 ServletContext 的實例。
       注意:全局對象即Application範圍對象,初始化階段的變量指在web.xml中,經由<context-param>元素所設定的變量,它的範圍也是Application範圍,例如:
web

<context-param> 
<param-name>Name</param-name> 
<param-value>browser</param-value> 
</context-param> 

        當容器啓動時,會創建一個Application範圍的對象,若要在JSP網頁中取得此變量時:
服務器

String name = (String)application.getInitParameter("Name"); 
${initPara.name} 
//如果在Servlet中,取得Name的值方法: 
String name = (String)ServletContext.getInitParameter("Name"); 

          目前Servlet2.4和JSP2.0總共有8個監聽器接口和6個Event類,以下:session

           忽然不支持圖片發佈, 筆者也很鬱悶,須要的讀者本身查吧。。。app

三.統計在線人數學習

       1.第一種方式spa

package webbook.chapter14;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CounterListener implements HttpSessionListener {
	private static long onlineNumber = 0;
	public static long getOnlineNumber() {
		return onlineNumber;
	}
	public void sessionCreated(HttpSessionEvent se) {
		onlineNumber++;
	}
	public void sessionDestroyed(HttpSessionEvent se) {
		onlineNumber--;
	}
}
當前應用中一共有<%=CounterListener.getOnlineNumber()%>人在線<br>

        統計的數字並不徹底準確,由於可能用戶下線了,session還沒失效,怎麼辦呢?俺也不知道。。xml

        2.第二種方式對象

            顯示誰在線,使用ArrayList,建立session時加入,銷燬時刪除(remove)。接口

四.結束語

        好好學習,每天向上。。。。。

相關文章
相關標籤/搜索