問題:
什么是容器?
什么是JSP容器?
JSP容器的作用是什么?
什么是JSP引擎?
分析:
這些問題是相同的,都是描述JSP或者Servlet對象是如何被管理或者運行的。
回答:
首先應該明白,JSP或者Servlet本身的運行與普通客戶端程序是不相同的,客戶端程序是我們直接調用的,而JSP或者Servlet的運行需要服務器(Tomcat),通常稱為應用服務器,服務器負責創建JSP或者Servlet對象,然后調用JSP對象或者Servlet對象的相應方法。
由誰完成JSP或者Servlet對象的創建、方法的調用的呢?由容器完成,或者稱為JSP容器。
容器是用來容納其它組件的,這些組件包括JSP或者Servlet,完成這些組件對象的創建、方法的調用以及對象的銷毀。
容器如何知道創建哪個JSP或者Servlet的對象的呢?
對於JSP,是根據文件名字確定的,對於Servlet,是通過web.xml中的配置確定的。
容器如何知道調用JSP或者Servlet的哪個方法?
對於JSP,JSP頁面會被轉換成Java類,而頁面中的內容會被轉換成Java類中的某個方法中的內容,而這個方法的名字是固定的,容器會調用這個方法。
對於Servlet,用戶需要根據請求的類型編寫doGet或者doPost方法,容器會根據請求的方式是get還是post分別調用doGet或者doPost。
而事實上,Tomcat在大多數情況下充當servlet的容器,也就是說:在寫完JSP代碼后進行第一次執行時,tomcat(servlet容器)先將JSP代碼翻譯成servlet類(java代碼),然后實例化該類,再調用該類的init,service,destory等進行生命周期服務。
當客戶端再進行第二次訪問請求時,此時就沒有servlet容器的翻譯這一步了,因為之前翻譯的java代碼會一直保存,以便於后面的訪問不再進行翻譯,可大大提高訪問效率。
所以,JSP頁面在第一次被訪問時,其所花費的時間是最長的。