亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

jsp 自動編譯機制詳細(xì)介紹

 更新時間:2016年12月01日 15:07:58   作者:汪洋之舟---seaboat  
這篇文章主要介紹了 Jasper的自動檢測實現(xiàn)的機制比較簡單,依靠某后臺線程不斷檢測JSP文件與編譯后的class文件的最后修改時間是否相同,若相同則認(rèn)為沒有改動,但倘若不同則需要重新編譯,需要的朋友可以參考下

 jsp 自動編譯機制詳細(xì)介紹

總的來說,Jasper的自動檢測實現(xiàn)的機制比較簡單,依靠某后臺線程不斷檢測JSP文件與編譯后的class文件的最后修改時間是否相同,若相同則認(rèn)為沒有改動,但倘若不同則需要重新編譯。實際上由于在Tomcat部署的項目的JSP可能引入了其他頁面,或者引入了其他jar包,而且這些資源都可能是遠程的資源,所以實際處理會比較復(fù)雜,同樣要遍歷檢測這些引入的不同資源是否做了修改。

 

上圖是一個形象的示意圖,我們知道Tomcat架構(gòu)中有四個級別的容器,Engine、Host、Context和Wrapper,而jsp編譯對應(yīng)在wrapper級別,所以通過StandardWrapper不斷執(zhí)行任務(wù)去調(diào)用jasper,而jasper則不斷檢測校驗本地和遠程的各種資源,一旦發(fā)現(xiàn)需要重新編譯則進行重編譯。往下看看具體如何實現(xiàn)。

首先,需要一個后臺執(zhí)行線程,Tomcat中有專門的一條線程處理不同容器的background任務(wù),想在不同的容器中執(zhí)行某些后臺任務(wù)只需重寫backgroundProcess方法即可實現(xiàn),由于JspServlet對應(yīng)于Wrapper級別,所以要在StandardWrapper中重寫backgroundProcess,它會調(diào)用實現(xiàn)了PeriodicEventListener接口的Servlet,其中JspServlet就實現(xiàn)了PeriodicEventListener接口,此接口只有一個periodicEvent方法,具體的檢測邏輯在此方法中實現(xiàn)即可。

其次,檢測判斷重新編譯的根據(jù)是什么?重新編譯就是再次把jsp變成Java再變成class,而觸發(fā)這個動作的條件就是當(dāng)我們修改了某個jsp文件后,或者某jsp文件引入的資源被修改后,都將觸發(fā)重新編譯動作,所以最好的判斷依據(jù)就是某jsp或資源的最后修改時間lastmodified屬性,正常順序是jsp經(jīng)過編譯后生成class文件,把此class文件的lastmodified屬性設(shè)置成jsp文件的lastmodified,此時兩個文件的lastmodified屬性是相同的,當(dāng)我們改了jsp文件保存后,jsp的lastmodified屬性就被置為當(dāng)前時間,此時通過判斷兩個文件的lastmodified屬性決定是否重新編譯。重新編譯后jsp與class文件的lastmodified屬性再次被置為相同。對于引入的資源,內(nèi)存中維護了上次編譯時引入資源的lastmodified屬性,不斷獲取引入資源的lastmodified屬性并與內(nèi)存中對應(yīng)的lastmodified屬性進行比較,同樣可以很容易判斷是否需要重新編譯。

最后,對于本地和遠程資源分別如何檢測?對于本地資源來說,使用java.io.File類可以很方便的實現(xiàn)對某JSP文件或其他文件的lastmodified屬性讀取。對于遠程資源,比如jar包,為了方便處理jar包含的屬性,使用java.NET.URL可以很方便操作,它包含了很多協(xié)議,例如常見的jar、file、ftp等協(xié)議,使用相當(dāng)方便,

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

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

本小節(jié)探討了Jasper自動檢測機制的實現(xiàn),自動檢測機制給我們的開發(fā)帶來了很好的體驗,我們不必自己修改了jsp后自己去執(zhí)行編譯操作,而是tomcat通過jasper幫我們定時檢測編譯操作。

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

相關(guān)文章

  • Js為表單動態(tài)添加節(jié)點內(nèi)容的方法

    Js為表單動態(tài)添加節(jié)點內(nèi)容的方法

    這篇文章主要介紹了Js為表單動態(tài)添加節(jié)點內(nèi)容的方法,實例分析了js針對表單節(jié)點進行添加操作的常用技巧,需要的朋友可以參考下
    2015-02-02
  • 微信小程序與后臺PHP交互的方法實例分析

    微信小程序與后臺PHP交互的方法實例分析

    這篇文章主要介紹了微信小程序與后臺PHP交互的方法,結(jié)合實例形式分析了微信小程序基于wx.request(OBJECT)方法與后臺php程序交互相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-12-12
  • js注入 黑客之路必備!

    js注入 黑客之路必備!

    這篇文章主要為大家詳細(xì)介紹了js注入,黑客之路必備!本文告訴大家什么是js注入,如何進行js注入攻防,感興趣的小伙伴們可以參考一下
    2016-09-09
  • JavaScript獲取css行間樣式,內(nèi)連樣式和外鏈樣式的簡單方法

    JavaScript獲取css行間樣式,內(nèi)連樣式和外鏈樣式的簡單方法

    下面小編就為大家?guī)硪黄狫avaScript獲取css行間樣式,內(nèi)連樣式和外鏈樣式的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 再論Javascript下字符串連接的性能

    再論Javascript下字符串連接的性能

    這是個老話題了,之所以再拿出來說,是因為瀏覽器一直在進步,以前最好的方法現(xiàn)在不一定是最好的。
    2011-03-03
  • JavaScript實現(xiàn)通訊錄功能

    JavaScript實現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JavaScript實現(xiàn)簡單的雙色球(實例講解)

    JavaScript實現(xiàn)簡單的雙色球(實例講解)

    下面小編就為大家?guī)硪黄狫avaScript實現(xiàn)簡單的雙色球(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • bootstrapTable+ajax加載數(shù)據(jù) refresh更新數(shù)據(jù)

    bootstrapTable+ajax加載數(shù)據(jù) refresh更新數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了bootstrapTable+ajax加載數(shù)據(jù),以及refresh更新數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • npm script和package-lock.json使用示例詳解

    npm script和package-lock.json使用示例詳解

    這篇文章主要為大家介紹了npm script和package-lock.json使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • js中的reduce()函數(shù)講解

    js中的reduce()函數(shù)講解

    今天小編就為大家分享一篇關(guān)于js中的reduce()函數(shù)講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論