亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Servlet和JSP 性能調整技術

2024-09-05 00:20:05
字體:
來源:轉載
供稿:網友

商業源碼熱門下載www.html.org.cn

  概述

在本文中, rahul chaudhary將描述性能調整技術 (ptt performance-tuning techniques) 的使用,來提升servlets 和jsp 的性能,以此來提升你的j2ee應用的性能。筆者假設讀者具有基礎的servlets 和jsps知識。

你的j2ee應用程序運行緩慢么?它們可以滿足足夠的壓力么?本文將會描述如何在開發高性能的應用和jsp以及servlets中使用性能調整技術 (ptt performance-tuning techniques)。使用這些技術可以構建更加快速、穩健的系統,以滿足更多用戶或者更多請求的需要。在本文中,我將會帶你進行實際的實踐,試驗如何調整性能提升你的servlets 和 jsp 頁面緩慢的性能,最終以提升你的j2ee應用的性能。其中一部分技術使用在開發過程階段,也就是說,適應于在你進行系統設計或者編寫代碼的時候。另外一些則是和配置相關技術。

調整方法1:使用 httpservlet init()方法緩存數據

應用服務器在servlet開始構造的時候,接受處理任何請求之前調用servlet的init()方法。在servlet的生命周期中僅僅調用一次。init()方法通過緩存靜態數據或者完成占用大量資源的操作,用來在初始化的過程中提高性能。

舉例說明,通過使用jdbc連接池是一個最好的實踐,在調用javax.sql.datasource接口的時候。依靠通過jndi(java命名和服務接口)樹獲得datasource.如果在每一次sql調用時候都進行jndi查找datasource ,將會嚴重的影響應用服務的應能。servlet的init()方法將用來取得datasource,并且將其進行緩存以備以后使用。

public class controllerservlet extends httpservlet

{

private javax.sql.datasource testds = null;

public void init(servletconfig config) throws servletexception

{

super.init(config);

context ctx = null;

try

{

ctx = new initialcontext();

testds = (javax.sql.datasource)ctx.lookup("jdbc/testds");

}

catch(namingexception ne)

{

ne.printstacktrace();

}

catch(exception e)

{

e.printstacktrace();

}

}

public javax.sql.datasource gettestds()

{

return testds;

}

……

……

}

調整方法2:禁止servlet和jsp的自動重載

為了節約開發時間,在開發階段servlet/jsp容器提供自動重載功能,方便你在修改servlet/jsp后不用重新啟動服務。可是,在生產環境下面,卻是占用大量開銷,因為進行了沒有必要的重新載入的操作,所以帶來了很懷的性能影響。同時,在部分類載入,部分為載入的時候也可能帶來各種奇怪的沖突。因此在j2ee的生產環境下關閉自動載入功能可以得到更好的性能。

一、在一個大型的j2ee項目中進行大量壓力測試下,在開發模式下莫名其妙的發生錯誤,部分請求任務失敗,就是因為載入類造成的系統沖突。

二、在另外一個大型的j2ee項目實際應用過程中,突發的大量用戶讓足以滿足用戶的系統處于癱瘓邊緣,經過了系統、數據庫、應用服務器等等調整后,終沒有解決問題。最后不得不排除人員去現場解決,最后發現問題竟是這個原因。這個事件僅僅發生在前天。

調整方法3:控制httpsession

許多應用服務需要一系列的客戶請求,這些請求之間又相互依存。因為http協議是無狀態的,所以基于web的應用系統必須使用session技術來維持連接。為了實現應用服務進行狀態管理,java servlet技術提供了一套api,通過使用httpsession對象進行會話管理,但是在使用這個功能的同時,不管servlet進行任何請求,httpsession對象都要進行讀寫,服務器也承擔了響應的系統開銷。你可以使用下列方法提升性能。

在默認情況下,不要在jsp頁面中創建httpsessions對象,jsp頁面默認會自動創建httpsessions,如果在你的jsp頁面中不需要httpsessions,為了節省一些性能,使用下面的頁面指令避免自動創建httpsessions對象。

<;%@ page session="false"%>

不要存儲大型對象到httpsession:如果你存儲大型對象數據到httpsession中,應用服務器不得不在每一次請求中處理整個的httpsession,這將會強迫使用java的串行化操作,占用大量系統資源。應用服務的性能將會因為java的串行化操作而減少。

在結束時候釋放httpsessions對象:在它們不在需要的時候使用httpsession.invalidate()方法消除sessions.

設置session的超時值:servlet有一個默認的超時值。如果你在這個時間里面,你既沒有移除它,也沒有使用它(進行任何服務請求),servlet服務將會自動將其銷毀。因為對內存和垃圾的回收處理,因此,超時值越大,對服務器的性能影響越大。所以,盡可能的保持session的超時值最小。

調整方法4:使用gzip壓縮

壓縮是一個去處庸余信息的操作,以便可以使用最小的空間存儲。使用gzip(gnu zip)壓縮內容可以顯著的減少下載html文件的時間。信息內容越小,傳送的速度越快。因此,如果在生成web應用的時候壓縮內容,就可以更快的傳送、顯示在用戶的屏幕上面。由于不是每一個瀏覽器都支持gzip壓縮功能,所以你必須簡單的檢查瀏覽器是否支持。

下面代碼是演示如何發送壓縮內容的例子:

public void doget(httpservletrequest request, httpservletresponse response)

throws ioexception, servletexception

{

outputstream out = null

// check the accepting-encoding header from the http request.

// if the header includes gzip, choose gzip.

// if the header includes compress, choose zip.

// otherwise choose no compression.

string encoding = request.getheader("accept-encoding");

if (encoding != null && encoding.indexof("gzip") != -1)

{

response.setheader("content-encoding" , "gzip");

out = new gzipoutputstream(response.getoutputstream());

}

else if (encoding != null && encoding.indexof("compress") != -1)

{

response.setheader("content-encoding" , "compress");

out = new zipoutputstream(response.getoutputstream());

}

else

{

out = response.getoutputstream();

}

……

……

}

調整方法5:不要使用singlethreadmodel

singlethreadmodel接口確保servlet在同一時間只接受一個請求。如果servlet實現這個接口,servlet將會為每一個新的請求創建隔離的servelet實例,這將造成很大的系統開銷。如果你需要處理線程安全問題,可以使用其他方法代替這種方法。在servlet2.4中singlethreadmodel接口已經被反對使用。

調整方法6:使用線程池

servlet引擎為每一個請求創建一個隔離的線程,分配這個線程給service()方法,在它執行完后移除這個線程。默認情況下,servlet引擎為每一個請求創建新的線程。因為創建和消除線程是需要系統開銷的,這種行為將會引起性能問題??梢酝ㄟ^使用線程池來提升性能。依據所期望的并發用戶數量,配置線程池的最大、最小、以及增加數量。在服務啟動的時候,servlet引擎使用最小的線程數量創建一個線程池。然后servlet引擎會分配線程給每一個請求,替換原來的創建新的線程,在處理完成后把線程返回給線程池。使用線程池,性能會有一個顯著的提升。如果需要,根據線程的最大和增加數量,更多的線程會被創建,添加到池中以供更多的請求使用。

調整方法7:選擇正確的包含機制

在jsp中有兩種方法使用包含文件:包含指令(<;%@ include file="test.jsp" %>) 和包含動作 (<;jsp:include page="test.jsp" flush="true" />)。包含指令在轉換的過程中包含文件內容;也就是說,在一個頁面轉換成一個servlet的時候。包含動作在請求處理的階段包含文件內容;也就是說,在一個用戶請求頁面的時候。包含指令快于包含動作。因此,除非被包含的內容經常變化,應該使用包含指令提升性能。

調整方法8:選擇正確的范圍在使用usebean動作

jsp頁面的一個強大功能就是在jsp中交互使用javabeans組件。通過使用<;jsp:usebean>動作標簽,javabeans可以被直接的嵌入jsp頁面中。語法如下:

<;jsp:usebean id="name" scope="page|request|session|application" class=

"package.classname" type="typename">

<;/jsp:usebean>

范圍屬性指定了bean的作用范圍。它的默認值是page.你可以根據你的系統要求選擇正確的范圍。否則它會影響到應用系統的性能。

舉例說明,如果你需要一個對象僅僅作為請求使用,但是你的范圍設置為session,在你完成請求后,這個對象將依然會留在內存中。直到你明確的清楚它為止,通過銷毀session,或者session自動超時。假如你沒有選擇正確的范圍,它同樣也會影響性能因為過度的內存和垃圾收集。因此,需要正確的設置對象的范圍,同時當你使用完成之后,也應該立即去除它們。

其他方法:

避免字符串相加:使用 + 操作會產生很多臨時對象,因為string是不可變化(immutable)的對象。越多的 + 操作,越多的臨時對象會被創建,造成很大的系統開銷。使用stringbuffer替換 + 操作,當你需要字符串相加的時候。

避免使用system.out.println:system.out.println是同步處理的在disk i/o操作中,并且會嚴重的影響性能。因此最大可能的要避免使用system.out.println.盡管存在強大的調試工具,有時候為了跟蹤目的、錯誤處理、調試程序,還是使用system.out.println.你應該配置system.out.println僅僅在開發和調試情況下使用。使用一個靜態的final boolean變量,在生產模式下,配置成false,避免system.out.println的使用。

servletoutputstream比較printwriter:使用printwriter會占用一些系統開銷,因為它是為處理字符流的輸出輸出功能。因此printwriter應該使用在確保有字符集轉換的環境中。換句話說,在你知道servlet返回的僅僅是二進制數據時候,應該使用servletoutputstream,這樣你可以消除字符轉換開銷,當servlet容器不用處理字符集轉換的時候。

總結

本文的目的是通過一些實踐操作,使用性能調整技術,通過提升servlets和jsp頁面的性能,進而提升j2ee應用系統的性能。下一次將會涉及性能調整關于ejb (enterprise javabeans), jms (java message service), and jdbc (java database connectivity)。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人黄色av| 久久香蕉国产线看观看网| 日韩av电影手机在线观看| 亚洲成人999| 欧美性猛交xxxx| 国产欧美日韩中文字幕在线| 亚洲欧美日韩第一区| 91精品国产91久久久久久不卡| 日韩中文字幕精品| 久久不射热爱视频精品| 米奇精品一区二区三区在线观看| 日韩美女主播视频| 国产精品久久久久福利| 日本韩国欧美精品大片卡二| 欧美美女18p| 亚洲精品久久久久中文字幕欢迎你| 国产精品美女无圣光视频| 亚洲图片制服诱惑| 91视频国产高清| 亚洲国产一区自拍| 欧美一性一乱一交一视频| 精品福利视频导航| 亚洲国内精品视频| 欧美电影在线观看| 亚洲欧美国产精品久久久久久久| 亚洲激情视频在线观看| 成人久久一区二区三区| 日韩美女激情视频| 久久精品夜夜夜夜夜久久| 亚洲精品久久久一区二区三区| 亚洲国模精品私拍| 欧美性xxxxxx| 国产精品久久久久久久久| 色偷偷88888欧美精品久久久| 欧美成人一区二区三区电影| 精品视频中文字幕| 青青草原成人在线视频| 欧美黄色片在线观看| 欧美另类在线播放| 91超碰caoporn97人人| 国产精品激情自拍| 亚洲成人av中文字幕| 久久露脸国产精品| 尤物yw午夜国产精品视频| 亚洲色图校园春色| 日韩欧美在线第一页| 欧美极品少妇全裸体| 国产精品欧美在线| 中日韩午夜理伦电影免费| 久久中文精品视频| 国产一区二区丝袜| 欧美性xxxxx极品| 日韩在线视频观看| 日韩最新免费不卡| 精品视频在线播放免| 亚洲一区二区三区视频| 日韩在线观看免费全集电视剧网站| 久久久久久久97| 国产精品久久久久久久久男| 日韩美女主播视频| 亚洲夜晚福利在线观看| 91香蕉电影院| xxx成人少妇69| 精品视频久久久久久| 中文字幕欧美专区| 欧美乱妇高清无乱码| 欧美日韩福利电影| 国产精品免费久久久| www.欧美三级电影.com| 欧美孕妇孕交黑巨大网站| 午夜精品一区二区三区在线视频| 日韩在线www| 性色av一区二区三区红粉影视| 久久亚洲精品国产亚洲老地址| 亚洲专区国产精品| 欧美一级在线播放| www.精品av.com| 国产不卡视频在线| 久久999免费视频| 亚洲国产精品va| 91精品国产高清自在线| 国产mv免费观看入口亚洲| 日韩欧美在线国产| 日本精品久久中文字幕佐佐木| 久久久久久久一区二区三区| 亚洲国产精品va在看黑人| 91九色单男在线观看| 一区二区日韩精品| 亚洲精品一区av在线播放| 激情成人在线视频| 国产中文欧美精品| 成人免费淫片aa视频免费| 国产成人精品久久二区二区| 国产一区在线播放| 亚洲精品综合久久中文字幕| 欧美一区二区大胆人体摄影专业网站| 亚洲嫩模很污视频| 精品国产一区二区三区久久久狼| 日韩av片永久免费网站| 久久av在线播放| 中文字幕自拍vr一区二区三区| 亚洲区bt下载| 亚洲欧洲午夜一线一品| 成人黄色av网| 欧美成人在线网站| 亚洲女人被黑人巨大进入| 成人国产精品日本在线| 亚洲第一福利视频| 亚洲精品日产aⅴ| 久久久噜噜噜久久久| 国产精品热视频| 亚洲免费av网址| 韩国国内大量揄拍精品视频| 国产精品69精品一区二区三区| 亚洲男人天堂手机在线| 久久久久久久网站| 欧美日韩激情小视频| 全亚洲最色的网站在线观看| 日韩视频免费观看| 亚洲第一页自拍| 精品亚洲精品福利线在观看| 欧美福利视频在线观看| 97精品国产97久久久久久春色| 91高清在线免费观看| 亚洲跨种族黑人xxx| 久久精品精品电影网| 欧美激情久久久久| 在线亚洲午夜片av大片| 美女视频久久黄| 精品久久久久久亚洲精品| 久久人人爽人人爽爽久久| 亚洲成色777777在线观看影院| 91丝袜美腿美女视频网站| 国产一区二区三区中文| 亚洲欧美另类国产| 亚洲理论在线a中文字幕| 国产亚洲欧美日韩美女| 亚洲桃花岛网站| 久久久精品国产一区二区| 国产亚洲综合久久| 欧美成人午夜激情在线| 高清欧美性猛交xxxx黑人猛交| 91精品国产色综合久久不卡98| 国产综合在线观看视频| 久久影视电视剧免费网站清宫辞电视| 欧美精品激情视频| 国产成人精品久久久| 96国产粉嫩美女| 另类美女黄大片| 国产精品色婷婷视频| 日韩在线视频线视频免费网站| 亚洲福利影片在线| 国模私拍一区二区三区| 97在线观看视频| 欧美国产在线电影| 91精品国产色综合久久不卡98口| 国产精品久久久久久一区二区| 国产偷亚洲偷欧美偷精品| 欧美视频在线观看 亚洲欧| 日韩在线视频观看正片免费网站| 欧美在线不卡区| 欧美有码在线观看视频| 亚洲黄色有码视频| 91精品国产91久久久|