明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在JSP編譯的時(shí)候,服務(wù)器內(nèi)部做了什么?

[摘要]作者/出處:Blueski編譯  在JSP第一次獲得請(qǐng)求時(shí),不管請(qǐng)求來(lái)自于客戶端瀏覽器還是服務(wù)器上的servlet, JSP文件將被JSP引擎(JSP engine)轉(zhuǎn)換成為一個(gè)servlet。而這...
作者/出處:Blueski編譯

 

在JSP第一次獲得請(qǐng)求時(shí),不管請(qǐng)求來(lái)自于客戶端瀏覽器還是服務(wù)器上的servlet, JSP文件將被JSP引擎(JSP engine)轉(zhuǎn)換成為一個(gè)servlet。而這個(gè)引擎本身也是一個(gè)servlet,在JSWDK,它就是 JspServlet。

在編譯時(shí)候如果發(fā)現(xiàn)jsp文件有任何語(yǔ)法錯(cuò)誤,轉(zhuǎn)換過(guò)程將中斷,并向客戶端發(fā)出出錯(cuò)信息;而如果編譯成功了,則所轉(zhuǎn)換產(chǎn)生的servlet代碼被編譯,然后該servlet被JSP引擎加載到內(nèi)存中。此時(shí)JSP引擎還請(qǐng)求了jspInit()方法的執(zhí)行,并對(duì)此servlet做初始化。jspInit()方法在servlet的生命周期中只被請(qǐng)求一次。然后jspService()方法被調(diào)用來(lái)處理客戶端的請(qǐng)求和回復(fù)操作。對(duì)于所有的隨后而來(lái)的對(duì)該JSP文件的請(qǐng)求,服務(wù)器將檢查該.jsp文件自最后一次被存取后是否經(jīng)過(guò)修改。如果沒(méi)有修改則請(qǐng)求將交給還在內(nèi)存中的servlet的jspService()方法以一種同時(shí)發(fā)生的方式加以處理。注意,由于 servlet始終駐于內(nèi)存,所以響應(yīng)是非常快的。
如果.jsp文件被修改了,服務(wù)器將自動(dòng)地對(duì)文件重新編譯,并將結(jié)果取代內(nèi)存中的servlet,并繼續(xù)上述處理過(guò)程。


雖然JSP效率很高,但在第一次調(diào)用時(shí)由于需要轉(zhuǎn)換和編譯而有一些輕微的延遲。 此外,如果在任何時(shí)候如果由于系統(tǒng)資源不足的原因,JSP引擎將以某種不確定的方式將servlet從內(nèi)存中移去。當(dāng)這種情況發(fā)生時(shí)jspDestroy()方法首先被調(diào)用, 然后servlet實(shí)例便被標(biāo)記加入“垃圾收集”處理。

 

相關(guān)內(nèi)容:

jsp預(yù)編譯器:
Jakarata Tomcat3.1 JSP服務(wù)器 (http://jakarta.apache.org)包含了一個(gè) JSP編譯器(JSPC),可以進(jìn)行預(yù)編譯,既可以定義一個(gè)web應(yīng)用的文件目錄,也可以指定某個(gè)特定jsp文件來(lái)進(jìn)行編譯。
另外,oracle也有jspc