【文章內(nèi)容簡介】
作,代碼結(jié)構(gòu)也看起來非常清晰。還有一個好處是,數(shù)據(jù)庫的修改只要修改DAO層的訪問方式就可以了,不用整個項目都進(jìn)行修改。 Ajax技術(shù)異步刷新傳統(tǒng)的web應(yīng)用允許用戶填寫表單(form),當(dāng)提交表單時就向web服務(wù)器發(fā)送一個請求。服務(wù)器接收并處理傳來的表單,然后返回一個新的網(wǎng)頁。這個做 法浪費了許多帶寬,因為在前后兩個頁面中的大部分HTML代碼往往是相同的。由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請求,應(yīng)用的響應(yīng)時間就依賴于服務(wù)器的響應(yīng)時間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。與此不同,AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù)(而不是返回整個頁面,只是把從服務(wù)器端上取出的數(shù)據(jù)填充到div或span層上去而已,實現(xiàn)無刷新的效果),它使用SOAP或其它一些基于 XML的web service接口,并在客戶端采用JavaScript處理來自服務(wù)器的響應(yīng)。因為在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快 的應(yīng)用。同時很多的處理工作可以在發(fā)出請求的客戶端機器上完成,所以Web服務(wù)器的處理時間也減少了。使用Ajax的最大優(yōu)點,就是能在不更新整個頁面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為 迅捷地回應(yīng)用戶動作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變過的信息。Ajax不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。 數(shù)據(jù)庫連接池在傳統(tǒng)的兩層結(jié)構(gòu)中,客戶端程序在啟動時打開數(shù)據(jù)庫連接,在退出程序時關(guān)閉數(shù)據(jù)庫連接。這樣,在整個程序運行中,每個客戶端始終占用一個數(shù)據(jù)庫連接,即使在大量沒有數(shù)據(jù)庫操作的空閑時間,如用戶輸入數(shù)據(jù)時,從而造成數(shù)據(jù)庫連接的使用效率低下。 在三層結(jié)構(gòu)模式中,數(shù)據(jù)庫連接通過中間層的連接池管理。只有當(dāng)用戶真正需要進(jìn)行數(shù)據(jù)庫操作時,中間層才從連接池申請一個連接,數(shù)據(jù)庫操作完畢,連接立即釋放到連接池中,以供其他用戶使用。這樣,不僅大大提高了數(shù)據(jù)庫連接的使用效率,使得大量用戶可以共享較少的數(shù)據(jù)庫連接,而且省去了建立連接的時間。 我們以Tomcat7數(shù)據(jù)庫連接池配置sqlserver2008。Tomcat JDBC連接池提供對多種數(shù)據(jù)庫的支持。 ,代碼中以如下方式實現(xiàn): Contextc=newInitialContext()。DataSourceds=(DataSource)(java:p/env/jdbc/books)。conn=()。 動態(tài)頁面的實現(xiàn)(CSS+動態(tài)js腳本),是提高用戶體驗的利器!而CSS是定義網(wǎng)頁樣式,讓網(wǎng)頁元素更好的表現(xiàn)給用戶,好的的網(wǎng)頁表現(xiàn)形式也能提高用戶體驗!js可以使網(wǎng)頁的功能更加豐富,給網(wǎng)頁添加更多實時的、動態(tài)的、交互的內(nèi)容。當(dāng)服務(wù)端需要對數(shù)據(jù)進(jìn)行驗證時,使用javascript可以在客戶端驗證數(shù)據(jù),不需要把數(shù)據(jù)傳到服務(wù)器端再傳回來,比較節(jié)省時間。你可以把網(wǎng)頁里的內(nèi)容隱藏起來,然后當(dāng)鼠標(biāo)放到某個地方的時候把隱藏的內(nèi)容顯示出來,就像這個頁面右上角的”我的知道“那個菜單做的事情。網(wǎng)頁里的下拉菜單基本上都使用js完成。當(dāng)你查看表格的時候,表格的內(nèi)容很多,你可以使用js給每一行數(shù)據(jù)設(shè)置不同的顏色以示區(qū)分,也可以用js完成鼠標(biāo)指到表格上表格就變色的功能。 批量信息圖表統(tǒng)計程序以javascript實現(xiàn)將數(shù)據(jù)庫中動態(tài)數(shù)據(jù)以圖表形式顯示在頁面上,利用ajax將實現(xiàn)更好的用戶體驗。這樣做減輕了服務(wù)端的壓力。不過,這種方式的確定是客戶端變得龐大。而且其實現(xiàn)原理很復(fù)雜,基本是div實現(xiàn)點陣字原理(一點點畫上去的)來實現(xiàn)的。效率就顯得不夠快。和原來用jfreechart比較,感覺jfreechart不好的地方是他總是先生成圖。然后利用src來顯示,其效率也不怎么高。不過服務(wù)器好的話,客戶端就輕松。 中文字符串相似度檢測的實現(xiàn)Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉(zhuǎn)換成另一個所需的最少編輯操作次數(shù)。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。編輯距離的算法是首先由俄國科學(xué)家Levenshtein提出的,故又叫Levenshtein Distance算法。在程序中,為實現(xiàn)題目相似度匹配功能,我采用了Levenshtein Distance算法和最長公共子序列算法LCS(Longest Common Subsequence)相結(jié)合的方式,計算預(yù)上報題目名稱和已發(fā)布題目的相似百分度。經(jīng)過大量數(shù)據(jù)測試,發(fā)現(xiàn)計算結(jié)果大于60%題目存在較為明顯的相似,故將結(jié)果定為相似度大于60%無法上報。核心代碼如下: //LCS algorithm 最長公共子序列算法 private static int longestCommonSubstringLength(String S1, String S2){ return longestCommonSubstrings(S1, S2, 0).toString().length()。 }private static CollectionString longestCommonSubstrings(String S1, String S2, int minimumLength){ CollectionInteger indexes = new ArrayListInteger()。 int Max = minimumLength。 for (int i = 0。 i ()。 i++){ for (int j = 0。 j ()。 j++){ int x = 0。 int y = (()i,()j)。 while (x y amp。amp。 ((i + x) == (j + x) )){ x++。 } if (x Max){ Max = x。 indexes = new ArrayListInteger()。 (i)。 }else if (x == Max){ (i)。 } } } CollectionString results = new HashSetString()。 for (Integer i : indexes){ ((i, (i + Max)))。 } return results。 } //Levenshtein Distance 算法實現(xiàn) public static double getEditDistance(String s, String t) { int d[][]。 // matrix int n。 // length of s int m。 // length of t int i。 // iterates through s int j。 // iterates through t char s_i。 // ith chara