1. 程式人生 > >02 - jsp的執行原理

02 - jsp的執行原理

jsp的執行原理

  • JSP的工作模式是請求/響應模式,客戶端首先發出HTTP請求,JSP程式收到請求後進行處理並返回處理結果,在一個JSP檔案第一次被請求時,JSP引擎(容器)把該JSP檔案轉換成為一個Servlet,而這個引擎本身也是一個Servlet. JSP的大概執行過程入下圖示:
    jsp執行原理圖

jsp執行過程

  1. 客戶端發出請求,請求訪問JSP檔案.

  2. JSP容器現將JSP檔案轉換成一個Java檔案,在轉換過程中,如果發現JSP檔案中存在任何語法錯誤,則中斷轉換過程, 並向伺服器和客戶端返回出錯資訊.

  3. 如果轉換成功, 則JSP容器將生成的Java原始檔編譯成相應的位元組碼檔案 *.class. 該class檔案就是一個Servlet, Servlet容器回像處理其他的Servlet一樣來處理它.

示例:
以Hello.jsp為例,當用戶第一次訪問Hello.jsp頁面時,該頁面會仙貝JSP容器轉換為一個名稱為 Hello_jsp.java 的原始檔,然後將原始檔便以為一個名稱為Hello_jsp.class的位元組碼檔案. 如果專案釋出在Tomcat的webapps目錄中 , 原始檔和 .class檔案可以在 "Tomcat安裝目錄/work/Catalina/localhost/專案名/org/apache/jsp " 中找到
在這裡插入圖片描述

上圖中位址列多出了org\apache\jsp , 這是由於JSP檔案轉換成類檔案時會帶有包名, 該報名為 org.apache.jsp . 從圖中還可以看出 , 被轉成的 .java檔案和.class檔案 (規則就是 把 “.” 變成"_" ,然後jsp接上去也作為檔名, 然後加上相應的字尾)

轉換後的 .java檔案
在這裡插入圖片描述

可以看到上圖中 轉換後的.java檔案並沒有實現Servlete介面, 但繼承了 org.apache.jspper.runtime.HttpJspBase類. 在Tomcat原始檔檢視HttpJspBase 類的原始碼 , 如下圖:
在這裡插入圖片描述

從HttpJspBase原始碼中可以看出, HttpJspBase類是HttpServlet的一個子類, 所以可以得出: jsp檔案轉換後的 java類 本質就是一個Servlet. 即jsp就是Servlet.