tocmat中jsp熱部署實現原理

來源:互聯網
上載者:User

我們知道在開發工程的時候jsp檔案是即修改即生效的,由於比較好奇就研究了一下tomcat對於jsp熱部署的實現原理,總結沉澱一下吧。Tomcat  jsp熱部署的實現原理大體是這樣的,每個JSP頁面從上次訪問到下次訪問總是有預設幾秒的緩衝時間的,也就說並不是嚴格的即修改即生效,tocmat7預設是有4秒的緩衝延遲的。這個預設的緩衝延遲是在類EmbeddedServletOptions的private intmodificationTestInterval = 4;這個屬性定義的。如果過了4秒緩衝時間即失效,這個時候tomcat就會讀取jsp的modified時間戳記和work目錄下編譯好的class檔案的modified的時間戳記作對比。如果相等則class檔案沒有到期,則不會重新編譯jsp檔案,如果到期了則重新將jsp編譯成java,並進一步編譯成class。同時調用JasperLoader來重新載入這個有jsp編譯好的class檔案。下面具體分析一下這個過程:

大體的類通訊時序圖是這樣的:

 

其中上文說的時間戳記的校正邏輯主要封裝在JDTCompiler的isOutDated方法裡面,這個方法的主要原始碼如下:

 

其中第一個紅框就是涉及到的N秒緩衝邏輯,如果緩衝沒有失效,則不會重新載入,這個ctxt.getOptions()擷取到的其實是EmbeddedServletOptions類,這個類預設定義的時間間隔是:

 

在實驗的時候我比較好奇就收到把這個值改為了40,果然jsp並沒有及時生效,而是過了40秒之後才生效。第二個紅框檢測的是擷取work目錄下的class檔案的對象。第三個紅框就是比較class檔案的時間戳記和JSP檔案的時間戳記,如果不相等則重新編譯載入(上面時序圖的流程)。這個就是jsp的熱部署流程!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.