, ,,
(1.江南大學信息工程學院, 江蘇 無錫 214122;2.中國船舶科學研究中心,江蘇 無錫 214082)
船舶性能預報系統是一個大型數字化示范工程項目中的一個子系統,也是船舶前期設計方面的一個網絡服務系統。它不僅能夠對船舶性能進行預報和設計,而且還能利用系統中的一個數據庫接口實現系統數據庫與中央數據庫的訪問。
Ajax特別適用應用于交互較多、頻繁讀數據、數據分類良好的Web[1],有如下優勢:
1) 減輕客戶端的內存消耗。Ajax的根本理念是“按需取數據”,所以最大可能地減少冗余請求,避免客戶端內存加載大量冗余數據。
2) 無刷新更新頁面。通過異步發送請求,避免頻繁刷新頁面,從而減少用戶的等待時間,提供給用戶一種連續的體驗。
3) Ajax技術可以將傳統的服務器工作轉嫁到客戶端,從而減輕服務器和帶寬的負擔。
4) Ajax基于標準化技術,幾乎所有瀏覽器都支持這種技術,無須下載插件或虛擬機程序[2-4]。
XMLHttpRequest是整個Ajax技術的靈魂,可以說,沒有XMLHttpRequest就沒有Ajax。Ajax技術的核心是異步發送請求,而XMLHttpRequest則是異步發送請求的對象,如果拋開異步發送請求,Ajax的其他技術將失去原來的意義。通過此類可以做到無需提交表單就可以實現與服務器的連接;無需刷新整個頁面,就可以動態更新頁面中一部分內容。XMLHttpRequest通常使用XML作為數據交換的載體,但也可使用其他的載體。簡單來說,就是通過XMLHttpRequest發送信息給服務器,異步接收服務器處理并返回信息,然后通過JavaScript動態更新頁面的部分內容。
在傳統的Web應用程序中,由用戶觸發一個Http請求到服務器,服務器對其進行處理后再返回一個新的Html網頁到客戶端,每當服務器處理客戶端提交的請求時,客戶都只能空閑等待,并且哪怕只是一次很小的交互,只需從服務器端得到很簡單的一個數據,都要返回一個完整的Html頁,而用戶每次都要浪費時間和帶寬去重新讀取整個頁面。而使用Ajax后,所有的操作都會很快響應沒有頁面重載的等待,而且用戶在接收到服務器返回的數據前,可以繼續進行其它操作,如輸入數據、滾動屏幕和使用應用程序等。原理見圖1。

圖1 Ajax工作原理圖
根據系統的需求,將系統劃分為四大模塊。
1) 用戶登錄模塊:用戶進入系統的接口。
2) 性能計算模塊中的三類子模塊分別完成船舶的快速性計算、耐波性和操縱性計算。
3) 數據庫交互模塊中的數據導入模塊將本地數據庫中保存的計算結果、試驗數據、背景資料數據存入中央數據庫中。而導出數據模塊則是對中央數據庫中保存的數據進行查詢和查看,并將試驗數據導出以作為快速性、耐波性和操縱性模塊的輸入參數。
4) 系統管理模塊中的用戶子模塊用來管理本系統的用戶基本信息。意見子模塊是用戶對系統提出意見和問題、并可進行討論的板塊。而QA子模塊是將用戶所提的問題及解決方案進行整理的板塊。日志管理模塊將記錄用戶登錄的時間、所進行的操作及退出系統的時間。具體的功能結構見圖2。

圖2 系統功能結構圖
系統中頁面的搭建使用Struts框架中的Tiles模板和Tiles組件技術[5-8]。頁面設計主要采用菜單欄、導航條、狀態欄相結合的方式,頁面的風格由級聯樣式單來統一,這樣所有的Web頁面都能保持一致的外觀,使整個系統顯得整潔、有序、結構清晰。
系統實現了多模塊功能。筆者充分利用Struts對模塊支持的功能使各個模塊都由自己的配置文件管理。為實現在不同模塊間進行轉發的功能,主要采用在
Ajax技術最大的特點就是它的異步交互。系統開發中遇到了一個很明顯的問題,在進行性能計算時由于計算量比較大(采用把船舶性能計算的公式封裝在用VC做成的DLL文件,再通過調用該DLL文件進行計算的方式)消耗的時間比較長,致使等待結果頁面出現的時間比較長,這顯然難以讓客戶滿意。Ajax的出現使這個問題得到了很好的解決。通過異步方式調用DLL進行計算使主線程和異步線程交互進行,此時用戶不需等待計算結果,當計算完成時通知主線程動態更新結果頁面。
在開發過程中,根據完成功能的難易程度采用了不同的Ajax開發方法,如Prototype框架、Dojo框架、DWR框架還有AjaxTags標簽等,不同的框架可以同時使用。本系統用Ajax主要實現了以下功能:
1) 完善用戶登錄和部分文本框輸入自動完成功能。該功能主要通過使用。 AjaxTags,將常用的Ajax應用封裝成簡單的標簽。
2) 性能計算模塊。該功能的實現是本項目開發中結合Ajax功能最好也是最直接的體現,是通過Prototype框架實現的。在性能計算中,它不再是由傳統的使用action進行調用計算完成的,而是由Ajax創建一個異步線程,由該線程調用處理計算的servlet類,在該類中調用DLL文件進行計算并將結果保存在Session中同時返回一個計算完成的標志位;在回調函數中根據響應返回的標志位自動更新顯示結果,實現異步調用。Prototype框架不僅僅是Ajax框架,也是一個功能強大的JavaScript函數庫,借助于這套JavaScript庫,開發者可以少寫很多JavaScript代碼,簡化了Ajax應用開發。
3) 查詢功能。根據不同的查詢條件,在同一個頁面顯示查詢結果,不需要每次查詢都重新加載整個頁面,只需動態更新查詢結果部分即可。
而對于查詢當查詢條件改變后,不需要頻繁刷新整個頁面,而是只改變現有頁面的結果部分,用戶操作起來顯得更加連貫。
系統已開發成功并投入使用,運行良好。通過合理使用Ajax技術克服了傳統開發上的缺點和不足,使開發的產品在動態交互方面得到了很大的改善,使服務器的運行效率得到了很大提升,使用戶得到了全新的瀏覽體驗,為用J2EE框架開發的成品開拓了更加廣闊的前景。但是筆者也注意到Ajax技術有特定的使用范圍,還存在一些安全問題,如JavaScript本身的安全性、數據在網絡上傳輸的安全性、客戶端調用遠程服務的安全性等。
[1] 柯自聰.Ajax開發精要——概念、案例與框架[M].北京:電子工業出版社,2006.
[2] 徐 峰.Ajax高級程序設計[M].北京:人民郵電出版社,2006.
[3] 朱 睿.Ajax與J2EE的新型結合[J].軟件工程,2007:64-65.
[4] 李 剛.基于J2EE的Ajax寶典[M].北京: 電子工業出版社,2007.
[5] 孫衛琴.精通Struts:基于MVC的JavaWeb設計與開發[M].北京:電子工業出版社,2005.
[6] 羅時飛.精通Spring[M].北京:電子工業出版社,2005.
[7] 孫衛琴.精通Hibernate:Java對象持久化技術詳解[M].北京:電子工業出版社,2005.
[8] 戎 偉,張 雙.精通Struts-java流行服務器、框架、工具以及整合應用[M].北京:人民郵電出版社2006.