我昨天寫一個映像跟蹤的Web Application的過程

來源:互聯網
上載者:User
昨天閑著無聊,2點左右開始犯困,想起來得有個把星期沒寫程式了,寫點程式提提神吧^_^。 隨便想想,就寫個映像跟蹤吧,把一個貌似圖形的url複製到論壇上或者別的網頁上,如果被自動加上<img src="一個定製的url" />,那麼瀏覽器就會自動請求這個url,然後,我的伺服器就會記住這個訪問者。相當與是跟蹤了哈。和“一統天下”的統計原理網站訪問量的原理是一樣的。 核心代碼:把請求內容定義為圖片,並且從預設流傳輸出去。核心代碼很少,加上注釋,不過100行+。使用java實現的話,就是寫一個servlet,然後把這個servlet的url-partrern定義為*.jpg,呵呵,這就實現了移花接木的功能了,每次對jpg檔案的請求,都會被轉移到那個servlet裡,然後在doGet或者doPost方法裡面,就能夠得到HttpServletRequest對象,然後你願意記錄什麼就隨意了,當然,最後別忘了把映像給人家傳過去^_^。 方案一:最簡單的方案,不使用資料庫,使用檔案儲存訪問記錄,把所有的處理都放在doGet或者doPost裡面。最簡單,最不靈活。半個小時就能搞定。調試部署也就是一個小時-。 方案二:使用資料庫記錄訪問記錄。這樣就要安裝mysql,把資料庫驅動jar放到正確的位置,還要建立資料表,在應用中建立串連操作資料庫,寫sql語句,釋放資源等等。這些東西還是都寫在doGet或者doPost裡面,這時候已經比較亂了……。大概要多用半個小時。資料存放區的還行,但是不具有擴充性。 我是從下面這個方案開始做的。方案三:配置並使用資料連線池,建個表儲存資料,同時:建立類DBConnectionManager,用來串連資料來源,getConnection方法。建立類DBUtil,用來封裝資料庫操作,executeUpdate,executeQuery等。建立類DataUtil,用來處理判斷資料合法性。建立類TrackData,將訪問記錄儲存為一個類,包含三個欄位,並且利用DataUtil,將資料類寫成一個DAO。 然後,在doGet或者doPost裡面加上:TrackData ip = new TrackData(request, response);ip.saveTrackData();就ok了。 寫完,測試,成功!因為已經進行了多次資料來源配置,並且DBConnectionManager,DBUtil等類已經在別的地方寫過,直接拖過來用的,大概時間用了一個半小時+。 改進:添加過濾ip列表(不用儲存自己訪問的記錄),定義影像檔緩衝(應對大訪問量,呵呵)。添加messages.propertiespassedIP=127.0.0.1 211.87.227.95 211.87.209.99
imageRoot=C:\\Tomcat5x\\webapps\\TrackYou\\images
imageNames=clover.jpg添加類Messages,封裝對messages.properties的操作。儲存訪問記錄的那段代碼就成了:  TrackData ip = new TrackData(request, response);
  if(DataUtil.isPassedIP(ip.getIP())){
   return;
  }
  ip.saveTrackData();改起來很繁瑣,但是還是ok了,用了半個多小時。 方案四:然後覺得不爽,這樣限制的太死了,於是想到了模仿事件驅動。添加介面:VisitEvent,裡面只有一個方法:onVisit,在在doGet或者doPost的時候觸發此事件。添加類VisitListen,實現介面VisitEvent。在onVisit方法裡儲存訪問記錄。在Servlet裡添加List VisitEventList,儲存事件介面。 最大的麻煩就是添加事件監聽,因為是Web Application,控制權在Tomcat手裡,我無法決定怎麼時候載入一個類,也就沒辦法控制什麼時候執行static{}塊。又不想把初始化的static{}塊亂放。於是添加Servlet:InitApplicationServlet,然後規定<load-on-startup>0</load-on-startup>,唯一作用就是執行static{}塊,初始化應用程式。static{
  InitApplication();
 } 到這裡,算是比較完美了。  寫完,發現核心的東西其實並不是最重要的,重要的是周邊的。核心的東西,就好像OpenGL庫,要想做出點東西,周邊的東西是很重要的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.