一、Servlet工作原理
Servlet是運行在Servlet容器中的,由Servlet容器來負責Servlet實例的查找、創建以及整個生命週期的管理,Servlet整個生命週期可以分爲四個階段:類裝載及實例創建階段、實例初始化階段、服務階段以及實例銷燬階段。
類裝載及實例創建階段
默認情況下,Servlet實例是在接受到第一個請求時進行創建並且以後的請求進行復用,如果有Servlet實例需要進行一些複雜的操作,需要在初始化時就完成,比如打開文件、初始化網絡連接等,可以配置在服務器啓動時就創建實例,具體配置方法爲在聲明servlet標籤中添加<load-on-startup>1</load-on-startup>標籤。
初始化 init(ServletConfig config)
一旦Servlet實例被創建,將會調用Servlet的inint方法,同時傳入ServletConfig實例,傳入Servlet的相關配置信息,init方法在整個Servlet生命週期中只會調用一次。
服務 services()
爲了提高效率,Servlet規範要求一個Servlet實例必須能夠同時服務於多個客戶端請求,即service()方法運行在多線程的環境下,Servlet開發者必須保證該方法的線程安全性。
銷燬 destory()
當Servlet容器將決定結束某個Servlet時,將會調用destory()方法,在destory方法中進行資源釋放,一旦destory方法被調用,Servlet容器將不會再發送任何請求給這個實例,若Servlet容器需再次使用該Servlet,需重新再實例化該Servlet實例。
二、Servlet執行流程
web服務器接受到一個http請求後,web服務器會將請求移交給servlet容器,servlet容器首先對所請求的URL進行解析並根據web.xml 配置文件找到相應的處理servlet,同時將request、response對象傳遞給它,servlet通過request對象可知道客戶端的請求者、請求信息以及其他的信息等,servlet在處理完請求後會把所有需要返回的信息放入response對象中並返回到客戶端,servlet一旦處理完請求,servlet容器就會刷新response對象,並把控制權重新返回給web服務器。
三、與其它技術的比較
與其它服務相比servlet有以下的一些優點:
1、運行速度上比CGI快,因爲使用了多線程
2、servlet使用了標準的api,可被許多web服務支持
3、與系統無關性,一次編譯多次使用