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幫我們定時檢測編譯操作。
感謝閱讀,希望能幫助大家

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具