weblogic的jsp問題解決方法_JSP教程
推薦:JSP XML實現(xiàn)網(wǎng)頁內(nèi)容動態(tài)顯示的方案一、xml技術(shù)簡介 XML(eXtensible Markup Language??可擴展標(biāo)記語言)是一種 擴展的源標(biāo)記語言,是可以定義其他語言的語言。 它是SGML的一個簡化子集,這個子集是專為Web
在做項目的時候,jsp在運行的時候出現(xiàn)了一些問題,現(xiàn)將我的問題解決方法做一個小結(jié),供以后作項目的參考。
問題1:
weblogic 的數(shù)據(jù)庫連接數(shù)目在程序運行中不斷增長,最后連接數(shù)目超過最大數(shù),導(dǎo)致weblogic服務(wù)關(guān)閉
原因:
在操作完數(shù)據(jù)庫后,沒有關(guān)閉數(shù)據(jù)庫連接;或者是返回結(jié)果集(Resultset),而無法在jsp中關(guān)閉數(shù)據(jù)庫連接。
解決方法:
1. 在操作完數(shù)據(jù)庫要關(guān)閉數(shù)據(jù)庫連接。
2. 盡量不要返回結(jié)果集Resultset, 可以返回Vector(一個字段)、Hashtable(多個字段),這樣可以在javabean中關(guān)閉數(shù)據(jù)庫。
3. 如果javabean中返回的是結(jié)果集(Resultset),也可以在javaBean中寫一個connectDB(連接數(shù)據(jù)庫)、closeDB(關(guān)閉數(shù)據(jù)庫)的方法,然后jsp里面調(diào)用connectDB,建立數(shù)據(jù)庫連接,同時就可以對數(shù)據(jù)庫進(jìn)行操作了,操作數(shù)據(jù)庫完畢,可以通過closeDB() 來關(guān)閉數(shù)據(jù)庫。
使用第二種方法
問題2:
在運行某一個jsp 程序的時候,weblogic 的內(nèi)存陡然增長,而且居高不下。最終導(dǎo)致weblogic 內(nèi)存不足,甚至當(dāng)機。
原因:
過度使用內(nèi)存。
解決方法:
1. 由于數(shù)據(jù)量比較大,在對字符串進(jìn)行操作的時候,使用 進(jìn)行字符串連接,而
相信大家對String都非常熟悉,我們也經(jīng)常要用它來做字符串的連接什么的,例如:
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);
比較一下結(jié)果,差距很明顯。
至于為什么String的連接這么做,因為String無法直接改變其長度,而必須采用StringBuffer的用法。
因此建議使用StringBuffer 的append 方法來進(jìn)行字符串相連。
2. 在解決這個問題的時候,我也嘗試使用上面的方法,效果并不是很明顯(消耗內(nèi)存上)。后來在顯示大量數(shù)據(jù)的時候,避免字符串相連的步驟,而直接使用out.println(),直接輸出。
問題3:Java并不阻止程序占用過多的內(nèi)存,當(dāng)對象向堆所請求的內(nèi)存不足時,垃圾收集器(Garbage Collector)就會自動啟動,釋放那些引用數(shù)為零的對象所占用的內(nèi)存,Java也不會自動釋放無用的對象的引用,如果程序忘記釋放指向?qū)ο蟮囊?則程序運行時的內(nèi)存隨著時間的推移而增加,發(fā)生所謂內(nèi)存泄漏(memory leaks),創(chuàng)建對象不但消耗CPU的時間和內(nèi)存,同時,為釋放對象內(nèi)存JVM需不停地啟動垃圾收集器(Garbage Collector),這也會消耗大量的CPU時間。
解決方法: 由于在運行一段時間jsp程序后,weblogic 的內(nèi)存會有一個緩慢的增長,這樣也會導(dǎo)致內(nèi)存溢出,為了避免這總現(xiàn)象的出現(xiàn),最終的解決方法是: 編寫一個servlet程序,在啟動服務(wù)器的時候,啟動一個這個servlet,每隔20分鐘運行在服務(wù)器端運行一次,來定時回收內(nèi)存。
問題4:
log文件里面的調(diào)試信息沒有注釋去掉。
解決方法:
在程序通過后,盡量把調(diào)試的信息注釋去掉。
同時在捕捉錯誤的時候要寫明程序名稱,方便查找,這一點做的還不夠。
最好能寫一個記錄log的方法,以便程序調(diào)用。
問題5
改善性能,提高速度。
具體實例:
我們再來看一個有關(guān)Vector類的代碼片段:
for(int I=0; I如果v包含100,000個元素,這個代碼片段將調(diào)用v.size()方法100,000次。雖然size方法是一個簡單的方法,但它仍舊需要一次方法調(diào)用的開銷,至少JVM需要為它配置以及清除堆棧環(huán)境。在這里,for循環(huán)內(nèi)部的代碼不會以任何方式修改Vector類型對象v的大小,因此上面的代碼最好改寫成下面這種形式:
int size = v.size(); for(int I=0; I雖然這是一個簡單的改動,但它仍舊贏得了性能。畢竟,每一個CPU周期都是寶貴的。
問題 6:
在 jsp 文件里面 不要寫
因為java 不需要引入此包就可以引用里面的類文件。
分享:實例講解在JSP開發(fā)中的對象和范圍屬性在JSP頁面中的對象,包括用戶創(chuàng)建的對象(例如,JavaBean對象)和JSP的隱含對象,都有一個范圍屬性。范圍定義了在什么時間內(nèi),在哪一個JSP頁面中可以訪問這些對象。例如,session對象在會
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-weblogic的jsp問題解決方法
。