丁振凡
(華東交通大學信息工程學院,江西南昌330013)
近年來,出現了眾多的Web網絡考試系統,監測正在考試的用戶成為一個有趣的問題.由于Web瀏覽器采用無連接的HTTP協議,給監測設計帶來一定困難.要實現在線用戶的監視,需要客戶端和 Web服務端的配合.本文采用AJAX技術與Spring結合實現考試在線用戶監測.其基本工作原理如圖1所示.服務端為tomcat服務器,采用Spring編程處理技術,Spring是一個高效的輕量級開發框架,通過Spring控制器實現HTTP請求和響應處理.客戶端通過AJAX技術實現與用戶的事件交互,并可通過AJAX引擎的HTTP接口實現與服務器的交互.

圖1 應用的基本工作原理
系統的實現邏輯如圖2所示.系統采用一個業務Bean來記錄在線考試用戶,Spring容器中構建的Bean對象在應用的整個生命周期保持有效.Spring控制器所提供的REST風格的服務邏輯要調用業務邏輯Bean中的相應方法.在Spring控制器代碼設計中可通過屬性依賴關系注入Bean.
通過集合類型的onlineUsers屬性存儲在線用戶,并提供該屬性的getter和setter方法,同時,針對用戶進入、用戶離開、考試監測處理分別定義了相應方法.代碼如下:


圖2 應用具體實現邏輯
在Servlet的配置文件中,要通過配置實現Bean在容器中的注冊.Bean的onlineUsers屬性初始設置為空集合,Bean的作用范圍采用默認的singleton形式,從而保證多用戶訪問Bean時操作的是同一個對象實例.以下為Bean的配置代碼:

根據應用特點,本應用在服務設計上沒有采用MVC模型中用視圖顯示信息的形式,而是采用給請求者返回消息的形式[1].服務方控制器共提供了3個Mapping方法.“/logexam”用于處理用戶進入考試,“/leaveexam”用于處理用戶離開考試,“/showusers”用于查詢在線用戶.前面兩個方法只需要在業務邏輯Bean中進行登記處理,不需要返回任何消息給服務請求者.返回消息的形式方便AJAX對服務的調用.本文采用google的JSON工具包實現對消息的Json封裝[2].另外,系統采用Spring Security實現用戶登錄認證與授權訪問處理[3].在控制器的Mapping方法中通過方法參數注入HttpServletRequest類型的request對象,利用其getRemoteUser()方法得到用戶標識.在控制器的方法中通過定義屬性monitor依賴引用容器中的monitorBean,這樣,在控制器的代碼中可方便通過monitor實例變量訪問業務邏輯 Bean中的方法.


值得一提的是,用HttpServletResponse對象發送響應消息時,要采用普通文本的方式發送,同時指明編碼方式為utf-8編碼,這樣客戶方可正確地解析字符串中的漢字字符.
客戶方通過Javascript的事件來監測用戶進入和離開考試頁面的行為.在頁面的body標簽中通過onload和onunload屬性設置對應的Javascript事件處理函數.函數中通過發送AJAX請求給服務方的控制邏輯[4],從而完成用戶進入和離開的登記處理.

實現頁面的定時刷新處理,有兩種基本思路.一種是利用HTML標簽,讓頁面定時請求服務器,例如,以下META標記將導致頁面每10秒刷新1次.

如果采用這種方式,服務器的控制器處理代碼也要做相應更改,要采用視圖顯示結果.客戶方不用編任何腳本代碼.
本文采用由AJAX定時發送請求的方式實現頁面更新.以下程序中,init()方法實現相關處理.網頁加載時,利用onload事件觸發執行該方法.init方法首先發送請求給服務器,并獲取服務器的JSON響應數據;調用JavaScript的eval函數JSON文本轉化為對象形式;然后,利用DHTML技術將對象數據項的值寫入頁面元素中;最后,通過Javascript的set-Timeout函數控制方法每間隔2秒重復執行.

本文介紹的考試監測主要是跟蹤查看當前在線解答試卷的用戶,及時掌握有哪些用戶缺考.通過用戶進入考試時的考試頁面的裝載與卸載事件來跟蹤的行為,客戶無論通過“后退”、“瀏覽其他頁面”、“關閉瀏覽器”等離開考試頁面,均能被監測到.該應用的設計模式也適用于其他網頁中對在線訪問者的監測處理.由于學生用戶標識經常以學號后兩位作為后綴,因此,實際應用中還可將用戶標識進行排序顯示,在服務方和客戶方均可進行排序處理,這樣可更清晰掌握有哪個學生缺考.
[1]丁振凡.基于AJAX結合Spring MVC的信息訪問服務模式研究[J].計算機時代,2012,(6):25 -29.
[2]丁振凡.Spring REST風格Web服務的Json消息封裝及解析研究[J].智能計算機與應用,2012,(2):9 -11.
[3]丁振凡.基于Spring Security的Web資源訪問控制[J].宜春學院學報,2012,(8):71 -74.
[4]丁振凡.Web編程實踐教程[M].北京:清華大學出版社,2011.