您現在的位置是:電腦技術吧?>? 基礎知識 ??>??如何深入講解,深入細致的講解??>??正文詳情

如何深入講解,深入細致的講解

蔡月桂2019-12-12 14:02:03 人圍觀
簡介金剛經講解方法1:在servlet的init()方法中緩存數據。在應用服務器初始化servlet實例之后,它將在服務客戶機請求之前調用servlet的init()方法。在深入淺出的講解

方法一:在servlet的init()方法中緩存數據當應用服務器初始化servlet實例之后,為客戶端請求提供服務之前,它會調用這個servlet的init()方法。

在一個servlet的生命周期中,init()方法只會被調用一次。

通過在init()方法中緩存一些靜態的數據或完成一些只需要執行一次的、耗時的操作,就可大大地提高系統性能。

例如,通過在init()方法中建立一個JDBC連接池是一個最佳例子,假設我們是用jdbc2.0的DataSource接口來取得數據庫連接,在通常的情況下,我們需要通過JNDI來取得具體的數據源。

我們可以想象在一個具體的應用中,如果每次SQL請求都要執行一次JNDI查詢的話,那系統性能將會急劇下降。

解決方法是如下代碼,它通過緩存DataSource,使得下一次SQL調用時仍然可以繼續利用它: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 自動重載(auto-reloading)Servlet/JSP提供了一個實用的技術,即自動重載技術,它為開發人員提供了一個好的開發環境,當你改變servlet和JSP頁面后而不必重啟應用服務器。

然而,這種技術在產品運行階段對系統的資源是一個極大的損耗,因為它會給JSP引擎的類裝載器(classloader)帶來極大的負擔。

因此關閉自動重載功能對系統性能的提升是一個極大的幫助。

方法 3: 不要濫用HttpSession在很多應用中,我們的程序需要保持客戶端的狀態,以便頁面之間可以相互聯系。

但不幸的是由于HTTP具有天生無狀態性,從而無法保存客戶端的狀態。

因此一般的應用服務器都提供了session來保存客戶的狀態。

在JSP應用服務器中,是通過HttpSession對像來實現session的功能的,但在方便的同時,它也給系統帶來了不小的負擔。

因為每當你獲得或更新session時,系統者要對它進行費時的序列化操作。

你可以通過對HttpSession的以下幾種處理方式來提升系統的性能:如果沒有必要,就應該關閉JSP頁面中對HttpSession的缺省設置: 如果你沒有明確指定的話,每個JSP頁面都會缺省地創建一個HttpSession。

如果你的JSP中不需要使用session的話,那可以通過如下的JSP頁面指示符來禁止它:<%@ page session=false%>不要在HttpSession中存放大的數據對像:如果你在HttpSession中存放大的數據對像的話,每當對它進行讀寫時,應用服務器都將對其進行序列化,從而增加了系統的額外負擔。

你在HttpSession中存放的數據對像越大,那系統的性能就下降得越快。

當你不需要HttpSession時,盡快地釋放它:當你不再需要session時,你可以通過調用HttpSession.invalidate()方法來釋放它。

盡量將session的超時時間設得短一點:在JSP應用服務器中,有一個缺省的session的超時時間。

當客戶在這個時間之后沒有進行任何操作的話,系統會將相關的session自動從內存中釋放。

超時時間設得越大,系統的性能就會越低,因此最好的方法就是盡量使得它的值保持在一個較低的水平。

方法 4: 將頁面輸出進行壓縮壓縮是解決數據冗余的一個好的方法,特別是在網絡帶寬不夠發達的今天。

有的瀏覽器支持gzip(GNU zip)進行來對HTML文件進行壓縮,這種方法可以戲劇性地減少HTML文件的下載時間。

因此,如果你將servlet或JSP頁面生成的HTML頁面進行壓縮的話,那用戶就會覺得頁面瀏覽速度會非常快。

但不幸的是,不是所有的瀏覽器都支持gzip壓縮,但你可以通過在你的程序中檢查客戶的瀏覽器是否支持它。

下面就是關于這種方法實現的一個代碼片段:public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{OutputStream out = nullString encoding = request.getHeader(Accept-Encoding;if (encoding != null encoding.indexOf(gzip != -1){request.setHeader(Content-Encoding , gzip;out = new GZIPOutputStream(request.getOutputStream());}else if (encoding != null encoding.indexOf(comdivss != -1){request.setHeader(Content-Encoding , comdivss;out = new ZIPOutputStream(request.getOutputStream());}else{out = request.getOutputStream(); } ... ...}方法 5: 使用線程池應用服務器缺省地為每個不同的客戶端請求創建一個線程進行處理,并為它們分派service()方法,當service()方法調用完成后,與之相應的線程也隨之撤消。

由于創建和撤消線程會耗費一定的系統資源,這種缺省模式降低了系統的性能。

但所幸的是我們可以通過創建一個線程池來改變這種狀況。

另外,我們還要為這個線程池設置一個最小線程數和一個最大線程數。

在應用服務器啟動時,它會創建數量等于最小線程數的一個線程池,當客戶有請求時,相應地從池從取出一個線程來進行處理,當處理完成后,再將線程重新放入到池中。

如果池中的線程不夠地話,系統會自動地增加池中線程的數量,但總量不能超過最大線程數。

通過使用線程池,當客戶端請求急劇增加時,系統的負載就會呈現的平滑的上升曲線,從而提高的系統的可伸縮性。

方法 6: 選擇正確的頁面包含機制在JSP中有兩種方法可以用來包含另一個頁面:1、使用include指示符(<%@ includee file=test.jsp %>)。

2、使用jsp指示符(<jsp:includee page=test.jsp flush=true/>)。

在實際中我發現,如果使用第一種方法的話,可以使得系統性能更高。

方法 7:正確地確定javabean的生命周期JSP的一個強大的地方就是對javabean的支持。

通過在JSP頁面中使用<jsp:useBean>標簽,可以將javabean直接插入到一個JSP頁面中。

它的使用方法如下:<jsp:useBean id=name scope=page|request|session|application class=package.className type=typeName></jsp:useBean>其中scope屬性指出了這個bean的生命周期。

缺省的生命周期為page。

如果你沒有正確地選擇bean的生命周期的話,它將影響系統的性能。

舉例來說,如果你只想在一次請求中使用某個bean,但你卻將這個bean的生命周期設置成了session,那當這次請求結束后,這個bean將仍然保留在內存中,除非session超時或用戶關閉瀏覽器。

這樣會耗費一定的內存,并無謂的增加了JVM垃圾收集器的工作量。

因此為bean設置正確的生命周期,并在bean的使命結束后盡快地清理它們,會使用系統性能有一個提高其它的方法在字符串連接操作中盡量不使用+操作符:在java編程中,我們常常使用+操作符來將幾個字符串連接起來,但你或許從來沒有想到過它居然會對系統性能造成影響吧?

由于字符串是常量,因此JVM會產生一些臨時的對像。

你使用的+越多,生成的臨時對像就越多,這樣也會給系統性能帶來一些影響。

解決的方法是用StringBuffer對像來代替+操作符。

避免使用System.out.println()方法:由于System.out.println()是一種同步調用,即在調用它時,磁盤I/O操作必須等待它的完成,因此我們要盡量避免對它的調用。

但我們在調試程序時它又是一個必不可少的方便工具,為了解決這個矛盾,我建議你最好使用Log4j工具,它既可以方便調試,而不會產生System.out.println()這樣的方法。

ServletOutputStream 與 PrintWriter的權衡:使用PrintWriter可能會帶來一些小的開銷,因為它將所有的原始輸出都轉換為字符流來輸出,因此如果使用它來作為頁面輸出的話,系統要負擔一個轉換過程。

而使用ServletOutputStream作為頁面輸出的話就不存在一個問題,但它是以二進制進行輸出的。

因此在實際應用中要權衡兩者的利弊。

總結本文的目的是通過對servlet和JSP的一些調優技術來極大地提高你的應用程序的性能,并因此提升整個J2EE應用的性能。

通過這些調優技術,你可以發現其實并不是某種技術平臺(比如J2EE和.NET之爭)決定了你的應用程序的性能,重要是你要對這種平臺有一個較為深入的了解,這樣你才能從根本上對自己的應用程序做一個優化!

版權聲明:本文由 蔡月桂 整理編輯。

原標題:如何多角度講解,深入的講解

轉載注明出處:http://www.dn9ww09s.icu/basics/15355.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 大二上總結,大二個人年度總結

    大二上總結,大二個人年度總結 相關圖片大二學期個人總結Servlet是一段Java代碼,它可以擴展web服務器的功能。每個servlet在一個進程中運行,對servlet的新請求作為servlet進程中的線程運行。大二上學期個人總結500...

  • php如何遍歷一個文件,php數組遍歷

    php如何遍歷一個文件,php數組遍歷 相關圖片php遍歷文件夾下所有文件這個例子描述了PHP如何遍歷類中包含的所有元素。與您分享以供參考。具體分析如下:這里可以得到PHP類中包含的所有元素的鍵值輸出?12345678910112類m遍歷it...

  • 無法連接數據庫,無法連接到數據庫

    無法連接數據庫,無法連接到數據庫 相關圖片數據庫連接失敗怎么辦現在有很多新的JSP用戶經常問如何連接數據庫,如何出錯?所以我把重點放在這篇文章上供你參考。實際上,將所有的數據庫邏輯都放在JSP中并不是一個好方法,...

  • sfb47使用實例,fc105使用實例

    sfb47使用實例,fc105使用實例 相關圖片正則表達式使用實例本文主要介紹phpsblobjectstorage。Splobjectstorage是SPL標準庫中的一個數據結構對象容器,用于存儲一組對象,特別是需要唯一標識實例化數組...

  • visual studio怎么用,在visual studio

    visual studio怎么用,在visual studio 相關圖片visual studio c最近,服務器總是彈出visual studio實時調試器,這非常令人沮喪。無法關閉。如何解決這個問題,如下圖所示:讓我們分析出現這種情況的原因:彈出應用程序:Vvisual studio 官...

  • 有什么方法可以讓pdf組件快些,vue定義組件的方法

    有什么方法可以讓pdf組件快些,vue定義組件的方法 相關圖片vue父組件調用子組件方法Object.createtextfile (filename [, overwrite [, Unicode]]) folderiview組件小...

  • mvc設計模式jsp用于實現,jsp開發框架

    mvc設計模式jsp用于實現,jsp開發框架 相關圖片jsp中的mvc模式一:當我第一次學習JSP時,我總是喜歡把它與ASP和PHP進行比較,我習慣用ASP開發模式來編寫JSP。后來,我發現真的很傻。事實上,當JSP出現時,它使用MV簡述jsp中的mvc模式...

  • asp調用ashx,asp調用列表

    asp調用ashx,asp調用列表 相關圖片asp javascript一。創建一個新的類庫mytestdl2,右鍵單擊項目mytestdll-properties-generate-check以注冊com互操作性3。打開assemjavascript與asp...

  • c數據結構庫,java有數據結構模板庫

    c數據結構庫,java有數據結構模板庫 相關圖片數據結構在線題庫本文主要介紹phpspl標準庫數據結構堆的簡單使用實例。并對最大堆和最小堆的相關知識進行了說明。您可以為您的朋友引用堆,它是為實現優先級隊列而設計的數據結...

  • asp 入門,asp入門實例

    asp 入門,asp入門實例 相關圖片aspnet從入門到精通!--#include File=conn.asp--%Dim idDim Rs,Sql id=Replace(Trim(Request.QueryString零基礎學asp教程...

熱評文章

  • c 環境配置,主機開發環境配置

    c 環境配置,主機開發環境配置 相關圖片maven環境配置FCKeditor是一個在sourceforge.net之上的開源項目,主要實現在線網頁編輯器的功能,使web程序具有MS-word等強大的編輯功能。官方網站是配置是什么...

  • if嵌套例子,嵌套編程

    if嵌套例子,嵌套編程 相關圖片c語言循環嵌套例子本文主要介紹了PHP嵌套輸出緩沖代碼的例子。本文解釋了使用ob系列函數嵌套的示例。如果需要朋友的話,可以引用可以嵌套的PHP輸出緩沖區。嵌套級別可以使用OB>g...

  • 基于asp系統,asp系統開發

    基于asp系統,asp系統開發 相關圖片sap財務系統headmeta http equiv=Content Language Content=zh cnmeta http equiv=Content Type Casp開源建站系統...

  • asp網站代碼,html代碼

    asp網站代碼,html代碼 相關圖片jsp代碼%@LANGUAGE=VBSCRIPT CODEPAGE=936%%session(aname)=session(admin_flag)=session.aboasp整站下載...

  • Java數組,jquery數組

    Java數組,jquery數組 相關圖片js數組怎么實現的一。數組數組的定義是一組按順序排列的值。單個值稱為元素。他們的職位有編號。從0開始,整個數組用方括號表示。Var arr=[12,34,56];上面的代碼表示已數組api...

  • 數組刪除元素,數組怎么刪除元素

    數組刪除元素,數組怎么刪除元素 相關圖片數組添加元素本文的例子描述了根據元素值通過jQuery刪除數組元素的方法。與您分享以供參考。具體如下:例如,如果不知道數組中C的下標,就刪除元素C?123var arr=[java數組刪除元素...

  • sqlserver建立觸發器,sqlserver查看觸發器

    sqlserver建立觸發器,sqlserver查看觸發器 相關圖片sql觸發器編寫一。存儲過程1。存儲過程的分類存儲過程是一種數據庫對象,它存儲在數據庫中,應用程序可以通過調用來執行,并允許用戶聲明變量和有條件地執行。具有強大編程功能...

  • exp備份數據庫,oracle備份恢復

    exp備份數據庫,oracle備份恢復 相關圖片exp備份數據庫命令JMYBJS=(描述=(地址=(協議=TCP)(主機=129.1.9.90)(端口=1521))(連接數據=(服務器=DEDICexp導出文件日期...

  • standby怎么用,in standby

    standby怎么用,in standby 相關圖片standby use準備:確認待機時可以支持對象和語句,以確保主庫中的表行可以唯一標識環境:操作系統:Red Hat Linux Enterprise 5 Oracle:11.2.standby mode...

  • 簡單框架,框架怎么畫

    簡單框架,框架怎么畫 相關圖片框架是什么本文主要介紹一個簡單的JavaScript類框架,有助于初學者理解JS類的創建和繼承。對于那些需要幫助的人,請參閱work in progress JavaSc網頁框架...

關注微信

变脸官网查询