<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蜜桃永久无码精品| 四虎www免费人成| 亚洲国产成人片在线观看| www免费黄色网| 亚洲精品成人在线| yellow免费网站| 国产亚洲精品精品国产亚洲综合| 一边摸一边爽一边叫床免费视频 | 在线观看亚洲精品国产| 一边摸一边桶一边脱免费视频| 国产老女人精品免费视频| 日韩亚洲翔田千里在线| 亚洲国产精品自在拍在线播放 | 亚洲精品久久无码| 免费又黄又硬又爽大片| 国产精品永久免费| 亚洲综合一区二区国产精品| av无码国产在线看免费网站| 在线亚洲高清揄拍自拍一品区| 在线免费观看一级毛片| 免费精品国自产拍在线播放| 亚洲色精品88色婷婷七月丁香| 久久久久久AV无码免费网站下载| 亚洲无线电影官网| 九九九精品成人免费视频| 国产精品亚洲一区二区三区在线观看| 亚洲无码黄色网址| 久久午夜伦鲁片免费无码| 亚洲国产成人久久综合一区| 国产精品视频免费一区二区三区| 国产黄色片免费看| 亚洲中文无码线在线观看| 免费无遮挡无码永久在线观看视频| 久久国产一片免费观看| 亚洲免费观看网站| 亚洲色偷偷狠狠综合网| 18国产精品白浆在线观看免费| 香蕉视频在线观看免费| 亚洲一区二区中文| 亚洲国产精品13p| 69成人免费视频|