如下內容引用自http://wiki.jikexueyuan.com/project/jsp/architecture.html:html
Web服務器須要一個JSP引擎,即處理JSP頁面的容器。JSP容器負責爲JSP頁面攔截請求。web
JSP容器適用於Web服務器,來提供JSP運行時環境和其餘服務的需求。它知道如何理解JSP的部分特殊元素。編程
如下圖表顯示了JSP容器的位置以及在一個Web應用程序中的JSP文件。瀏覽器
JSP處理服務器
下面的步驟解釋了web服務器如何使用JSP建立Web頁面:jsp
做爲正常的頁面,瀏覽器發送一個HTTP請求到Web服務器。翻譯
Web服務器認可一個JSP頁面的HTTP請求,並將其轉發給一個JSP引擎。這是經過使用URL或JSP頁面實現的,該JSP頁面是以.jsp結尾而不是以.html結尾的。htm
JSP引擎從磁盤加載JSP頁面並將其轉換爲一個Servlet的內容。這種轉換是很是簡單的,全部模板文本轉換爲println()語句,全部JSP元素轉換爲Java代碼實現頁面的相應的動態行爲。blog
JSP引擎編譯Servlet到一個可執行的類中,並將原始請求轉發給一個Servlet引擎。get
調用Servlet引擎的Web服務器的一部分加載Servlet類並執行它。執行期間,Servlet產生一個HTML格式的輸出,Servlet引擎將該輸出傳遞到HTTP響應內的Web服務器中。
Web服務器將HTTP響應以靜態HTML內容的形式轉發到瀏覽器中。
上述全部步驟以下圖所示:
一般,JSP引擎檢查JSP文件的Servlet是否已存在,JSP的修改日期是否比Servlet的過期。若是JSP的修改日期比其生成的Servlet的修改日期過期,那麼JSP容器假設JSP修改日期沒有改變,且生成的Servlet的修改日期仍然與JSP的內容相匹配。與其餘腳本語言(好比 PHP)相比,這個過程更有效率,所以更加快速。
因此在某種程度上來講,一個JSP頁面只是用另外一種方式來寫Servlet,而不須要成爲一個Java編程奇才。除了翻譯階段,處理JS 頁面徹底就像處理一個普通的Servlet同樣。