, ,,
(1.江南大學(xué)信息工程學(xué)院, 江蘇 無錫 214122;2.中國船舶科學(xué)研究中心,江蘇 無錫 214082)
船舶性能預(yù)報(bào)系統(tǒng)是一個大型數(shù)字化示范工程項(xiàng)目中的一個子系統(tǒng),也是船舶前期設(shè)計(jì)方面的一個網(wǎng)絡(luò)服務(wù)系統(tǒng)。它不僅能夠?qū)Υ靶阅苓M(jìn)行預(yù)報(bào)和設(shè)計(jì),而且還能利用系統(tǒng)中的一個數(shù)據(jù)庫接口實(shí)現(xiàn)系統(tǒng)數(shù)據(jù)庫與中央數(shù)據(jù)庫的訪問。
Ajax特別適用應(yīng)用于交互較多、頻繁讀數(shù)據(jù)、數(shù)據(jù)分類良好的Web[1],有如下優(yōu)勢:
1) 減輕客戶端的內(nèi)存消耗。Ajax的根本理念是“按需取數(shù)據(jù)”,所以最大可能地減少冗余請求,避免客戶端內(nèi)存加載大量冗余數(shù)據(jù)。
2) 無刷新更新頁面。通過異步發(fā)送請求,避免頻繁刷新頁面,從而減少用戶的等待時間,提供給用戶一種連續(xù)的體驗(yàn)。
3) Ajax技術(shù)可以將傳統(tǒng)的服務(wù)器工作轉(zhuǎn)嫁到客戶端,從而減輕服務(wù)器和帶寬的負(fù)擔(dān)。
4) Ajax基于標(biāo)準(zhǔn)化技術(shù),幾乎所有瀏覽器都支持這種技術(shù),無須下載插件或虛擬機(jī)程序[2-4]。
XMLHttpRequest是整個Ajax技術(shù)的靈魂,可以說,沒有XMLHttpRequest就沒有Ajax。Ajax技術(shù)的核心是異步發(fā)送請求,而XMLHttpRequest則是異步發(fā)送請求的對象,如果拋開異步發(fā)送請求,Ajax的其他技術(shù)將失去原來的意義。通過此類可以做到無需提交表單就可以實(shí)現(xiàn)與服務(wù)器的連接;無需刷新整個頁面,就可以動態(tài)更新頁面中一部分內(nèi)容。XMLHttpRequest通常使用XML作為數(shù)據(jù)交換的載體,但也可使用其他的載體。簡單來說,就是通過XMLHttpRequest發(fā)送信息給服務(wù)器,異步接收服務(wù)器處理并返回信息,然后通過JavaScript動態(tài)更新頁面的部分內(nèi)容。
在傳統(tǒng)的Web應(yīng)用程序中,由用戶觸發(fā)一個Http請求到服務(wù)器,服務(wù)器對其進(jìn)行處理后再返回一個新的Html網(wǎng)頁到客戶端,每當(dāng)服務(wù)器處理客戶端提交的請求時,客戶都只能空閑等待,并且哪怕只是一次很小的交互,只需從服務(wù)器端得到很簡單的一個數(shù)據(jù),都要返回一個完整的Html頁,而用戶每次都要浪費(fèi)時間和帶寬去重新讀取整個頁面。而使用Ajax后,所有的操作都會很快響應(yīng)沒有頁面重載的等待,而且用戶在接收到服務(wù)器返回的數(shù)據(jù)前,可以繼續(xù)進(jìn)行其它操作,如輸入數(shù)據(jù)、滾動屏幕和使用應(yīng)用程序等。原理見圖1。
圖1 Ajax工作原理圖
根據(jù)系統(tǒng)的需求,將系統(tǒng)劃分為四大模塊。
1) 用戶登錄模塊:用戶進(jìn)入系統(tǒng)的接口。
2) 性能計(jì)算模塊中的三類子模塊分別完成船舶的快速性計(jì)算、耐波性和操縱性計(jì)算。
3) 數(shù)據(jù)庫交互模塊中的數(shù)據(jù)導(dǎo)入模塊將本地?cái)?shù)據(jù)庫中保存的計(jì)算結(jié)果、試驗(yàn)數(shù)據(jù)、背景資料數(shù)據(jù)存入中央數(shù)據(jù)庫中。而導(dǎo)出數(shù)據(jù)模塊則是對中央數(shù)據(jù)庫中保存的數(shù)據(jù)進(jìn)行查詢和查看,并將試驗(yàn)數(shù)據(jù)導(dǎo)出以作為快速性、耐波性和操縱性模塊的輸入?yún)?shù)。
4) 系統(tǒng)管理模塊中的用戶子模塊用來管理本系統(tǒng)的用戶基本信息。意見子模塊是用戶對系統(tǒng)提出意見和問題、并可進(jìn)行討論的板塊。而QA子模塊是將用戶所提的問題及解決方案進(jìn)行整理的板塊。日志管理模塊將記錄用戶登錄的時間、所進(jìn)行的操作及退出系統(tǒng)的時間。具體的功能結(jié)構(gòu)見圖2。
圖2 系統(tǒng)功能結(jié)構(gòu)圖
系統(tǒng)中頁面的搭建使用Struts框架中的Tiles模板和Tiles組件技術(shù)[5-8]。頁面設(shè)計(jì)主要采用菜單欄、導(dǎo)航條、狀態(tài)欄相結(jié)合的方式,頁面的風(fēng)格由級聯(lián)樣式單來統(tǒng)一,這樣所有的Web頁面都能保持一致的外觀,使整個系統(tǒng)顯得整潔、有序、結(jié)構(gòu)清晰。
系統(tǒng)實(shí)現(xiàn)了多模塊功能。筆者充分利用Struts對模塊支持的功能使各個模塊都由自己的配置文件管理。為實(shí)現(xiàn)在不同模塊間進(jìn)行轉(zhuǎn)發(fā)的功能,主要采用在
Ajax技術(shù)最大的特點(diǎn)就是它的異步交互。系統(tǒng)開發(fā)中遇到了一個很明顯的問題,在進(jìn)行性能計(jì)算時由于計(jì)算量比較大(采用把船舶性能計(jì)算的公式封裝在用VC做成的DLL文件,再通過調(diào)用該DLL文件進(jìn)行計(jì)算的方式)消耗的時間比較長,致使等待結(jié)果頁面出現(xiàn)的時間比較長,這顯然難以讓客戶滿意。Ajax的出現(xiàn)使這個問題得到了很好的解決。通過異步方式調(diào)用DLL進(jìn)行計(jì)算使主線程和異步線程交互進(jìn)行,此時用戶不需等待計(jì)算結(jié)果,當(dāng)計(jì)算完成時通知主線程動態(tài)更新結(jié)果頁面。
在開發(fā)過程中,根據(jù)完成功能的難易程度采用了不同的Ajax開發(fā)方法,如Prototype框架、Dojo框架、DWR框架還有AjaxTags標(biāo)簽等,不同的框架可以同時使用。本系統(tǒng)用Ajax主要實(shí)現(xiàn)了以下功能:
1) 完善用戶登錄和部分文本框輸入自動完成功能。該功能主要通過使用。 AjaxTags,將常用的Ajax應(yīng)用封裝成簡單的標(biāo)簽。
2) 性能計(jì)算模塊。該功能的實(shí)現(xiàn)是本項(xiàng)目開發(fā)中結(jié)合Ajax功能最好也是最直接的體現(xiàn),是通過Prototype框架實(shí)現(xiàn)的。在性能計(jì)算中,它不再是由傳統(tǒng)的使用action進(jìn)行調(diào)用計(jì)算完成的,而是由Ajax創(chuàng)建一個異步線程,由該線程調(diào)用處理計(jì)算的servlet類,在該類中調(diào)用DLL文件進(jìn)行計(jì)算并將結(jié)果保存在Session中同時返回一個計(jì)算完成的標(biāo)志位;在回調(diào)函數(shù)中根據(jù)響應(yīng)返回的標(biāo)志位自動更新顯示結(jié)果,實(shí)現(xiàn)異步調(diào)用。Prototype框架不僅僅是Ajax框架,也是一個功能強(qiáng)大的JavaScript函數(shù)庫,借助于這套JavaScript庫,開發(fā)者可以少寫很多JavaScript代碼,簡化了Ajax應(yīng)用開發(fā)。
3) 查詢功能。根據(jù)不同的查詢條件,在同一個頁面顯示查詢結(jié)果,不需要每次查詢都重新加載整個頁面,只需動態(tài)更新查詢結(jié)果部分即可。
而對于查詢當(dāng)查詢條件改變后,不需要頻繁刷新整個頁面,而是只改變現(xiàn)有頁面的結(jié)果部分,用戶操作起來顯得更加連貫。
系統(tǒng)已開發(fā)成功并投入使用,運(yùn)行良好。通過合理使用Ajax技術(shù)克服了傳統(tǒng)開發(fā)上的缺點(diǎn)和不足,使開發(fā)的產(chǎn)品在動態(tài)交互方面得到了很大的改善,使服務(wù)器的運(yùn)行效率得到了很大提升,使用戶得到了全新的瀏覽體驗(yàn),為用J2EE框架開發(fā)的成品開拓了更加廣闊的前景。但是筆者也注意到Ajax技術(shù)有特定的使用范圍,還存在一些安全問題,如JavaScript本身的安全性、數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)陌踩?、客戶端調(diào)用遠(yuǎn)程服務(wù)的安全性等。
[1] 柯自聰.Ajax開發(fā)精要——概念、案例與框架[M].北京:電子工業(yè)出版社,2006.
[2] 徐 峰.Ajax高級程序設(shè)計(jì)[M].北京:人民郵電出版社,2006.
[3] 朱 睿.Ajax與J2EE的新型結(jié)合[J].軟件工程,2007:64-65.
[4] 李 剛.基于J2EE的Ajax寶典[M].北京: 電子工業(yè)出版社,2007.
[5] 孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,2005.
[6] 羅時飛.精通Spring[M].北京:電子工業(yè)出版社,2005.
[7] 孫衛(wèi)琴.精通Hibernate:Java對象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.
[8] 戎 偉,張 雙.精通Struts-java流行服務(wù)器、框架、工具以及整合應(yīng)用[M].北京:人民郵電出版社2006.