<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評論-247  文章-5  trackbacks-0

    Servlet

    Servlet 沒有 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 與 JSP

    JSP 本質是一個 Servlet,它的運行也需要容器的支持。
    在 JSP 和 Servlet 文件中都可以編寫 Java 和 HTML 代碼,不同的是,
    Servlet 雖然也可以動態的生成頁面內容,但更加偏向于邏輯的控制。
    JSP 最終被轉換成 Servlet 在 jvm 中解釋執行,在 JSP 中雖然也可以編寫 Java 代碼,但它更加偏向于頁面視圖的展現。
    在 MVC 架構模式中,就 JSP 和 Servlet 而言,C 通常由 Servlet 充當,V 通常由 JSP 來充當。




      
    posted on 2013-09-30 17:35 fancydeepin 閱讀(43122) 評論(5)  編輯  收藏

    評論:
    # re: JSP/Servlet 工作原理 2013-09-30 20:54 | xixi
    圖用什么畫的~  回復  更多評論
      
    # re: JSP/Servlet 工作原理 2013-09-30 21:04 | fancydeepin
    @xixi
    Visio  回復  更多評論
      
    # re: JSP/Servlet 工作原理 2013-10-01 14:26 | 零柒鎖業
    便運行與之對應的 Servlet 實例的 service() 方法  回復  更多評論
      
    # re: JSP/Servlet 工作原理 2013-10-01 16:16 | fancydeepin
    @零柒鎖業
    這句話有什么問題嗎? 請指教。  回復  更多評論
      
    # re: JSP/Servlet 工作原理[未登錄] 2015-07-01 16:41 | 1
    寫的不錯。  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 4444亚洲国产成人精品| 国产亚洲精aa成人网站| 国产免费久久精品丫丫| 免费黄色网址入口| 国产精品亚洲视频| 一级女性全黄久久生活片免费| 国产精品免费综合一区视频| 亚洲av无码成人精品国产| 免费看又爽又黄禁片视频1000| 亚洲日韩一中文字暮| 女人18毛片水最多免费观看| 亚洲色成人WWW永久在线观看| 好吊妞在线成人免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 18以下岁毛片在免费播放| 亚洲电影中文字幕| 麻花传媒剧在线mv免费观看 | 午夜精品在线免费观看| 鲁啊鲁在线视频免费播放| 日本亚洲国产一区二区三区| 在线播放免费人成毛片乱码 | 亚洲三级视频在线| 日本一道高清不卡免费| 一级做a爰片久久毛片免费看 | 亚洲一级毛片免费在线观看| 久久亚洲最大成人网4438| 国产精品免费_区二区三区观看| 在线播放免费人成视频网站| 亚洲av永久无码精品网站 | 亚洲乱码日产精品BD在线观看| 野花高清在线观看免费完整版中文| 亚洲精品美女久久久久久久| 亚洲日本va午夜中文字幕久久| 久久成人无码国产免费播放| va天堂va亚洲va影视中文字幕| 国产免费观看黄AV片| 免费在线中文日本| 亚洲av色香蕉一区二区三区蜜桃| 亚洲中文字幕第一页在线| 精品免费久久久久久久| 黄网站色成年片大免费高清 |