weblogic的jsp問題解決方案(轉)
來源:互聯網
上載者:User
weblogic的jsp問題解決方案
在做項目的時候,jsp在啟動並執行時候出現了一些問題,現將我的問題解決方案做一個小結,供以後作項目的參考。
問題1:
weblogic 的資料庫連接數目在程式運行中不斷增長,最後串連數目超過最大數,導致weblogic服務關閉
原因:
在操作完資料庫後,沒有關閉資料庫連接;或者是返回結果集(Resultset),而無法在jsp中關閉資料庫連接。
解決方案:
1. 在操作完資料庫要關閉資料庫連接。
2. 盡量不要返回結果集Resultset, 可以返回Vector(一個欄位)、Hashtable(多個欄位),這樣可以在javabean中關閉資料庫。
3. 如果javabean中返回的是結果集(Resultset),也可以在javaBean中寫一個connectDB(串連資料庫)、closeDB(關閉資料庫)的方法,然後jsp裡面調用connectDB(),建立資料庫連接,同時就可以對資料庫進行操作了,操作資料庫完畢,可以通過closeDB() 來關閉資料庫。
使用第二種方法
問題2:
在運行某一個jsp 程式的時候,weblogic 的記憶體陡然增長,而且居高不下。最終導致weblogic 記憶體不足,甚至當機。
原因:
過度使用記憶體。
解決方案:
1. 由於資料量比較大,在對字串進行操作的時候,使用 + 進行字串串連,而
相信大家對String都非常熟悉,我們也經常要用它來做字串的串連什麼的,例如:
String a =b+c file://b,c 都是String
但是在實際的編譯中卻是這樣:
String a=new StringBuffer().append(b).append(c).toString() 顯然,在一個簡單的語句中卻意外的多產生了2個對象:
.StringBuffer()
.toString返回的一個String
我們比較一下這兩段程式的效能:
程式片斷一:
StringBuffer s=new StringBuffer();
long start = System.currentTimeMillis();
for (int i=0;i<10000;i++){
s1+="a";
}
long stop = System.currentTimeMillis();
System.out.println(stop-start);
程式片斷二:
StringBuffer s=new StringBuffer(10000);//
long start=System.currentTimeMillis();
for (int i=0;i<10000;i++){
s.append("a");
}
long stop=System.currentTimeMillis();
System.out.println(stop-start);
比較一下結果,差距很明顯。
至於為什麼String的串連這麼做,因為String無法直接改變其長度,而必須採用StringBuffer的用法。