<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也就監聽到,方法不錯。
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲国产成人精品91久久久| 91免费播放人人爽人人快乐| 亚洲免费观看网站| 亚洲成色在线综合网站| 国产精品无码免费视频二三区| 成年人免费网站在线观看| www视频免费看| 国产日本一线在线观看免费| 免费影院未满十八勿进网站| 99无码人妻一区二区三区免费| 免费h片在线观看网址最新| 毛片视频免费观看| 四虎成人免费网址在线| 成在人线AV无码免费| 国产做床爱无遮挡免费视频| 亚洲精品成人区在线观看| 亚洲国产精品无码专区在线观看| 亚洲国产亚洲综合在线尤物| 亚洲色大网站WWW永久网站| 一级看片免费视频| 好紧我太爽了视频免费国产 | 四虎永久免费影院| 狠狠亚洲婷婷综合色香五月排名| 亚洲精品成人无码中文毛片不卡| 亚洲国产精品一区二区久久| 亚洲欧洲日韩国产一区二区三区| 免费VA在线观看无码| 131美女爱做免费毛片| 亚洲一级片内射网站在线观看| 亚洲天堂中文资源| 免费精品国产自产拍在线观看| 国产一区二区免费| 亚洲综合精品香蕉久久网| 亚洲Av高清一区二区三区| 九九九精品视频免费| 欧洲美熟女乱又伦免费视频| 亚洲精品福利在线观看| 99久久99久久精品免费观看 | 国产亚洲综合成人91精品| 久久精品免费大片国产大片 | 久久久久久亚洲精品|