jsp 自動編譯機制詳細介紹_javascript技巧

來源:互聯網
上載者:User

 jsp 自動編譯機制詳細介紹

總的來說,Jasper的自動檢測實現的機制比較簡單,依靠某後台線程不斷檢測JSP檔案與編譯後的class檔案的最後修改時間是否相同,若相同則認為沒有改動,但倘若不同則需要重新編譯。實際上由於在Tomcat部署的項目的JSP可能引入了其他頁面,或者引入了其他jar包,而且這些資源都可能是遠端資源,所以實際處理會比較複雜,同樣要遍曆檢測這些引入的不同資源是否做了修改。

 

上圖是一個形象的示意圖,我們知道Tomcat架構中有四個層級的容器,Engine、Host、Context和Wrapper,而jsp編譯對應在wrapper層級,所以通過StandardWrapper不斷執行任務去調用jasper,而jasper則不斷檢測校正本地和遠端各種資源,一旦發現需要重新編譯則進行重編譯。往下看看具體如何?。

首先,需要一個後台執行線程,Tomcat中有專門的一條線程處理不同容器的background任務,想在不同的容器中執行某些背景工作只需重寫backgroundProcess方法即可實現,由於JspServlet對應於Wrapper層級,所以要在StandardWrapper中重寫backgroundProcess,它會調用實現了PeriodicEventListener介面的Servlet,其中JspServlet就實現了PeriodicEventListener介面,此介面只有一個periodicEvent方法,具體的檢測邏輯在此方法中實現即可。

其次,檢測判斷重新編譯的根據是什嗎?重新編譯就是再次把jsp變成Java再變成class,而觸發這個動作的條件就是當我們修改了某個jsp檔案後,或者某jsp檔案引入的資源被修改後,都將觸發重新編譯動作,所以最好的判斷依據就是某jsp或資源的最後修改時間lastmodified屬性,正常順序是jsp經過編譯後產生class檔案,把此class檔案的lastmodified屬性設定成jsp檔案的lastmodified,此時兩個檔案的lastmodified屬性是相同的,當我們改了jsp檔案儲存後,jsp的lastmodified屬性就被置為目前時間,此時通過判斷兩個檔案的lastmodified屬性決定是否重新編譯。重新編譯後jsp與class檔案的lastmodified屬性再次被置為相同。對於引入的資源,記憶體中維護了上次編譯時間引入資源的lastmodified屬性,不斷擷取引入資源的lastmodified屬性並與記憶體中對應的lastmodified屬性進行比較,同樣可以很容易判斷是否需要重新編譯。

最後,對於本地和遠端資源分別如何檢測?對於本地資源來說,使用java.io.File類可以很方便的實現對某JSP檔案或其他檔案的lastmodified屬性讀取。對於遠端資源,比如jar包,為了方便處理jar包含的屬性,使用java.NET.URL可以很方便操作,它包含了很多協議,例如常見的jar、file、ftp等協議,使用相當方便,

URL includeUrl = new URL("jar:http://hostname/third.jar!/");URLConnection iuc = includeUrl.openConnection();long includeLastModified = ((JarURLConnection) iuc).getJarEntry().getTime();

只需三步即完成對遠程jar包的讀取且取出最後修改時間。當然URL還支援本地檔案資源的讀取,所以它是很好的資源讀取抽象對象,Tomcat中對引入資源的管理都是使用URL作為操作對象。

本小節探討了Jasper自動檢測機制的實現,自動檢測機制給我們的開發帶來了很好的體驗,我們不必自己修改了jsp後自己去執行編譯操作,而是tomcat通過jasper幫我們定時檢測編譯操作。

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.