轉自:https://blog.csdn.net/y277an/article/details/76561451html
用戶訪問jsp頁面時,jsp的處理過程以下圖所示: java
客戶第一次請求jsp頁面時,jsp引擎會將jsp文件中的腳本代碼(HTML)和代碼片斷(Java代碼)所有轉換爲java代碼,轉換過程很是直觀:對於HTML文本只須要用簡單的out.println方法包裹,對於java腳本只作保留或簡單的處理。web
預處理階段把jsp文件解析爲java代碼,編譯階段jsp引擎把java代碼編譯成servlet類文件,對於Tomcat,生成的class文件默認狀況下存放在<Tomcat>/work
目錄下。docker
編譯後的class對象被加載到容器中,並根據用戶的請求生成HTML格式的響應頁面返回給客戶端。
在執行jsp網頁時,一般分爲兩個時期:轉譯時期和請求時期。轉譯時期jsp頁面被翻譯成Servlet類,而後編譯成Class文件;用戶請求時期,servlet類被執行,生成HTML響應至客戶端。設計模式
jsp的轉譯和請求都在在第一次訪問時進行的,因此用戶在第一次訪問jsp頁面時響應時間會比較長。在以後的請求中,這些工做已經完成,時間延長問題不存在了。在處理後續的訪問時jsp和servlet的執行速度是同樣的。tomcat
jsp要轉譯爲servlet,可是servlet沒有main()方法,servlet對象的建立、方法的調用由web容器來實現。以Tomcat爲例,先看一下Tomcat的整體結構: 服務器
從圖中能夠看出,Tomcat的核心組建是connector和Container,container就是容器。容器就是負責管理控制servlet的應用程序。圖中的jasper就是解析jsp的jsp引擎。Tomcat既是servlet容器又是web服務器,也是jsp引擎。架構
關於tomcat架構能夠參考淘寶架構師寫的:Tomcat 系統架構與設計模式,第 1 部分: 工做原理
jsp
關於jsp引擎更詳細介紹能夠參考:Tomcat 6 — 使用Jasper引擎解析JSP.net
概念區別:Web容器、服務器、容器的理解總結