JSP架構

Web服務器需要一個JSP引擎,即一個處理JSP頁面的容器(類似於:Tomcat和Jetty)。 JSP容器負責攔截JSP頁面的請求。本教程使用內置JSP容器的Apache Tomcat來支持JSP頁面的開發。

JSP容器與Web服務器配合使用以提供運行時環境和JSP需要的其他服務。它知道如何解釋作爲JSP一部分的特殊元素。

下面的架構圖顯示了JSP容器和JSP文件在Web應用程序中的位置。

JSP架構

JSP處理

以下步驟說明Web服務器如何使用JSP創建Web頁面 -

  • 與一般的頁面一樣,瀏覽器向Web服務器發送HTTP請求。
  • Web服務器識別HTTP請求是針對JSP頁面,並將其轉發給JSP引擎。這可以通過使用以.jsp(而不是.html結尾)的URL或JSP頁面完成。
  • JSP引擎從磁盤加載JSP頁面並將其轉換爲servlet內容。這個轉換非常簡單,所有模板文本都轉換爲println()語句,並將所有JSP元素轉換爲Java代碼。此代碼實現頁面的相應動態行爲。
  • JSP引擎將servlet編譯爲可執行類,並將原始請求轉發到servlet引擎。
  • Servlet引擎的Web服務器加載Servlet類並執行它。在執行期間,servlet生成HTML格式的輸出。HTTP響應中的servlet引擎將輸出傳遞給Web服務器。
  • Web服務器根據HTTP響應將靜態HTML內容轉發到瀏覽器。
  • 最後,Web瀏覽器處理HTTP響應中動態生成的HTML頁面,就像它是靜態頁面一樣。

JSP架構

通常,JSP引擎將檢查JSP文件的servlet是否已存在,並且JSP上的修改日期是否比servlet更舊。 如果JSP早於其生成的servlet,則JSP容器將會認爲(假定)JSP尚未更改,生成的servlet仍然與JSP的內容相匹配,從而不必重新生成。這使得該過程比其他腳本語言(如PHP)更加有效,因此更快。

所以在某種程度上,JSP頁面實際上只是另一種編寫servlet的方式。除了編譯階段,JSP頁面的處理方式與一般的servlet完全相同。