JSP/Servlet 工作原理

來源:互聯網
上載者:User

標籤:des   style   class   blog   http   java   

JSP/Servlet 工作原理ServletServlet 沒有 main 方法,不能夠獨立的運行,它的運行需要容器的支援,Tomcat 是最常用的 JSP/Servlet 容器。
Servlet 運行在 Servlet 容器中,並由容器管理從建立到銷毀的整個過程。
Servlet 的生命週期(1) 載入和執行個體化
Servlet 容器裝載和執行個體化一個 Servlet。建立出該 Servlet 類的一個執行個體。
(2) 初始化
在 Servlet 執行個體化完成之後,容器負責調用該 Servlet 執行個體的 init() 方法,在處理使用者請求之前,來做一些額外的初始化工作。
(3) 處理請求
當 Servlet 容器接收到一個 Servlet 請求時,便運行與之對應的 Servlet 執行個體的 service() 方法,service() 方法再派遣運行與請求相對應的 
doXX(doGet,doPost) 方法來處理使用者請求。
(4) 銷毀
當 Servlet 容器決定將一個 Servlet 從伺服器中移除時 ( 如 Servlet 檔案被更新 ),便調用該 Servlet 執行個體的 destroy() 方法,在銷毀該 Servlet 執行個體之前,
來做一些其他的工作。
其中,(1)(2)(4) 在 Servlet 的整個生命週期中只會被執行一次。
Servlet 的工作原理結合右邊給出的流程圖:
當用戶端瀏覽器向伺服器請求一個 Servlet 時,伺服器收到該請求後,首先到容器中檢索與請求
匹配的 Servlet 執行個體是否已經存在。若不存在,則 Servlet 容器負責載入並執行個體化出該類 Servlet
的一個執行個體對象,接著容器架構負責調用該執行個體的 init() 方法來對執行個體做一些初始化工作,然後
Servlet 容器運行該執行個體的 service() 方法。
若 Servlet 執行個體已經存在,則容器架構直接調用該執行個體的 service() 方法。service() 方法在運行時,自動派遣運行與使用者請求相對應的 doXX() 方法來響應使用者發起的請求。
通常,每個 Servlet 類在容器中只存在一個執行個體,每當請求到來時,則分配一條線程來處理該請求。







JSP 工作原理結合右邊給出的流程圖:當用戶端瀏覽器向伺服器請求一個 JSP 頁面時,伺服器收到該請求後,首先檢查所請求的這個
JSP 檔案內容 ( 代碼 ) 是否已經被更新,或者是否是 JSP 檔案建立後的第一次被訪問,如果是,
那麼,這個 JSP 檔案就會在伺服器端的 JSP 引擎作用下轉化為一個 Servlet 類的 Java 原始碼
檔案。緊接著,這個 Servlet 類會在 Java 編譯器的作用下被編譯成一個位元組碼檔案,並裝載
到 jvm 解釋執行。剩下的就等同於 Servlet 的處理過程了。
如果被請求的 JSP 檔案內容 ( 代碼 ) 沒有被修改,那麼它的處理過程也等同於一個 Servlet 的
處理過程。即直接由伺服器檢索出與之對應的 Servlet 執行個體來處理。

需要注意的是,JSP 檔案不是在伺服器啟動的時候轉換成 Servlet 類的。而是在被用戶端訪問
的時候才可能發生轉換的 ( 如 JSP 檔案內容沒有被更新等,就不再發生 Servlet 轉換 )。就 Tomcat 而言,開啟目錄 %Tomcat%/work/%您的工程檔案目錄%,然後會看到裡面有 3
個子目錄:org/apache/jsp,若沒有這 3 個目錄,說明項目的 JSP 檔案還沒有被訪問過,
開啟進到 jsp 目錄下,會看到一些 *_jsp.java 和 *_jsp.class 檔案,這就是 JSP 檔案被轉換成
Servlet 類的源檔案和位元組碼檔案了。
有興趣的話,可以使用瀏覽器訪問伺服器中的 JSP,然後觀察 JSP 轉換 Servlet 以及編譯的時機。Servlet 與 JSPJSP 本質是一個 Servlet,它的運行也需要容器的支援。
在 JSP 和 Servlet 檔案中都可以編寫 Java 和 HTML 程式碼,不同的是,
Servlet 雖然也可以動態產生頁面內容,但更加偏向於邏輯的控制。
JSP 最終被轉換成 Servlet 在 jvm 中解釋執行,在 JSP 中雖然也可以編寫 Java 代碼,但它更加偏向於整頁模式的展現。
在 MVC 架構模式中,就 JSP 和 Servlet 而言,C 通常由 Servlet 充當,V 通常由 JSP 來充當。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.