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 實例來處理。新聞熱點
疑難解答