<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    應用,一定要應用

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

    基本方法:

    基本的方法,網上到處都是,在 java 中就是在 web.xml 注冊一個 Listener ,如下:

    <listener>

    ??? <listener-class>xp.web.SessionCounter</listener-class>

    </listener>

    SessionCounter.java 實現 javax.servlet.http.HttpSessionListener 接口,分別在 sessionCreated 方法和 sessionDestroyed 方法中處理 session 數目。

    ?

    這樣的方法有一定的問題:

    1 、對于真正從網頁訪問的和搜索引擎的 spider 無法區分。

    2 、當 Tomcat 重啟時,加載了上次持久化的 session 時,無法準確計算在線數。

    ?

    第二個問題我們可以不予考慮,這是 tomcat 容器實現不標準的問題,我們要解決的是的第一個問題,如何知道你的訪問的是真實的。

    ?

    js 繞過搜索引擎

    做過 pv 統計的都知道,可以用 script 的方式得到你真實的 pageView 數目,我們現在要做的就是這樣的一件事情,我們在所有的頁面都加入一段話:

    <script type="text/javascript">

    document.write ("<iframe src='/sessionCountServlet' width=0 height=0 frameborder=no border=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=no></iframe>");

    </script>

    然后我們寫上一個 servlet 來記錄這些真正的訪問者。

    import java.io.*;

    ?

    import javax.servlet.*;

    import javax.servlet.http.*;

    public class SessionCounterServlet extends HttpServlet {

    ??? public SessionCounterServlet() {

    ??????? super();

    ??? }

    ?

    ??? public void doGet(HttpServletRequest request,

    ????????????????????? HttpServletResponse response) throws IOException,

    ??????????? ServletException {

    ?

    ??????? process(request, response);

    ?

    ??? }

    ?

    ??? public void doPost(HttpServletRequest request,

    ?????????????????????? HttpServletResponse response) throws IOException,

    ??????????? ServletException {

    ?

    ??????? process(request, response);

    ?

    ??? }

    ?

    ??? public void process(HttpServletRequest request,

    ??????????????????????? HttpServletResponse response) throws IOException,

    ??????????? ServletException {

    ??????? SessionCounter.put(request.getSession().getId());

    }

    }

    ?

    我們可以看到這個 servlet 只是做了一件事情,在 process 里面做了 SessionCounter.put(request.getSession().getId()); 這個動作。

    我們來看看我們的 SessionCounter 做了些什么:

    import javax.servlet.http.*;

    import java.util.Hashtable;

    ?

    public class SessionCounter implements HttpSessionListener {

    ??? public SessionCounter() {

    ??? }

    ?

    ??? public static Hashtable m_real = new Hashtable();

    ?

    ??? private static long count = 0;

    ?

    ??? public void sessionCreated(HttpSessionEvent e) {

    ??????? count++;

    ??? }

    ?

    ??? public void sessionDestroyed(HttpSessionEvent e) {

    ??????? if (count > 0) {

    ??????????? count--;

    ??????? }

    ??????? m_real.remove(e.getSession().getId());

    ??? }

    ?

    ??? public static long getSessionCount() {

    ??????? return count;

    ??? }

    ?

    ??? public static void put(String sessionId){

    ??????? m_real.put(sessionId,"1");

    ??? }

    ?

    ??? public static int getRealCount(){

    ??????? return m_real.size();

    ??? }

    }

    我們記錄了一個靜態的 hash 表來記錄激活狀態的 sessionid ,并在 session 銷毀的時候將這個 sessionid 置為空。

    怎么把 servlet 配置到 web 應用中我就不羅唆了。

    posted on 2006-12-14 15:10 flyffa 閱讀(2404) 評論(1)  編輯  收藏 所屬分類: 其他應用

    Feedback

    # re: 得到準確的在線人數統計-減少搜索引擎的干擾 2006-12-14 16:25 loocky
    用listener來監聽,每次用ie訪問就觸發servlet,listener也就監聽到,方法不錯。
      回復  更多評論
      

    主站蜘蛛池模板: 国产极品粉嫩泬免费观看 | 国产亚洲精品无码拍拍拍色欲| 久久久亚洲AV波多野结衣| 国产成年无码久久久免费| 亚洲VA成无码人在线观看天堂| a毛片在线免费观看| 亚洲av无码专区在线播放| 花蝴蝶免费视频在线观看高清版 | 亚洲午夜国产片在线观看| 特级毛片A级毛片免费播放| 国产在线19禁免费观看| 国产亚洲精品免费| 亚洲精品国产V片在线观看| 男人扒开添女人下部免费视频| 亚洲午夜福利精品无码| 国产成年无码久久久免费| 亚洲伊人tv综合网色| 91人成网站色www免费下载| 亚洲伊人久久大香线蕉啊| 成年人网站在线免费观看| 亚洲成av人在线观看网站| 亚洲av无码乱码在线观看野外| 一级毛片a免费播放王色| 亚洲高清国产拍精品26U| 57pao一国产成视频永久免费| 亚洲AV无码专区在线亚 | 亚洲精品无码专区久久同性男| 97在线免费观看视频| 亚洲高清视频免费| 在线A级毛片无码免费真人| 含羞草国产亚洲精品岁国产精品| 国产成人精品久久亚洲| 无码精品人妻一区二区三区免费看| 亚洲国产美女精品久久久久| 日本免费一区二区三区最新vr| 一级毛片在线完整免费观看| 91大神亚洲影视在线| 国产成人免费A在线视频| 午夜精品射精入后重之免费观看| 亚洲av永久无码精品三区在线4 | 一个人在线观看视频免费|