作者/出處:Blueski編譯
在JSP第一次獲得請求時,不管請求來自于客戶端瀏覽器還是服務器上的servlet, JSP文件將被JSP引擎(JSP engine)轉換成為一個servlet。而這個引擎本身也是一個servlet,在JSWDK,它就是 JspServlet。
在編譯時候如果發現jsp文件有任何語法錯誤,轉換過程將中斷,并向客戶端發出出錯信息;而如果編譯成功了,則所轉換產生的servlet代碼被編譯,然后該servlet被JSP引擎加載到內存中。此時JSP引擎還請求了jspInit()方法的執行,并對此servlet做初始化。jspInit()方法在servlet的生命周期中只被請求一次。然后jspService()方法被調用來處理客戶端的請求和回復操作。對于所有的隨后而來的對該JSP文件的請求,服務器將檢查該.jsp文件自最后一次被存取后是否經過修改。如果沒有修改則請求將交給還在內存中的servlet的jspService()方法以一種同時發生的方式加以處理。注意,由于 servlet始終駐于內存,所以響應是非?斓。 如果.jsp文件被修改了,服務器將自動地對文件重新編譯,并將結果取代內存中的servlet,并繼續上述處理過程。
雖然JSP效率很高,但在第一次調用時由于需要轉換和編譯而有一些輕微的延遲。 此外,如果在任何時候如果由于系統資源不足的原因,JSP引擎將以某種不確定的方式將servlet從內存中移去。當這種情況發生時jspDestroy()方法首先被調用, 然后servlet實例便被標記加入“垃圾收集”處理。
相關內容:
jsp預編譯器: Jakarata Tomcat3.1 JSP服務器 (http://jakarta.apache.org)包含了一個 JSP編譯器(JSPC),可以進行預編譯,既可以定義一個web應用的文件目錄,也可以指定某個特定jsp文件來進行編譯。 另外,oracle也有jspc
|