Servlet介紹

JSP的本質就是Servlet,開發者把編寫好的JSP頁面部署在Web容器中之後,Web容器會將JSP編譯成對應的Servlet。但直接使用Servlet的壞處是:Servlet的開發效率非常低,特別是當Servlet生成表現層頁面時,頁面中所有的HTML標籤,都需要採用Servlet的輸出流來輸出,極其繁瑣。而且Servlet是Java類,必須由程序員開發、修改、維護,這些問題都使Servlet作爲表現層技術顯得很困難。

自MVC規範出現後,Servlet的責任開始明確下來:僅僅作爲控制器使用。


HttpServlet包含的三個重要的方法:

init(ServletConifg config):創建Servlet實例時,調用該方法初始化Servlet資源。該方法只能調用一次。

service(ServletRequest req, ServletResponse resp):Servlet實例的服務方法。該方法根據用戶請求的GET、POST等調用相應的doGet、doPost等處理方法。該方法爲客戶端用戶提供服務,可以在Servlet實例的整個生命週期中,在Servlet調用destory方法之前多次調用。

destroy():銷燬Servlet實例時,自動調用該方法來回收資源。

通常無需重寫init()和destroy()方法,除非需要在初始化Servlet時,完成某些資源初始化的方法,才考慮重寫init方法。如果需要在銷燬Servlet之前,先完成某些資源的回收,比如關閉數據庫連接等,才需要重寫destroy方法


Servlet和JSP的區別:

Servlet中沒有內置對象,原來JSP中的內置對象都必須由程序顯示創建。

對於靜態的HTML標籤,Servlet都必須使用頁面輸出流逐行輸出。

JSP是Servlet的一種簡化。使用JSP只需要完成程序員需要輸出到客戶端的內容,至於JSP腳本如何嵌入一個類中,由JSP容器完成。而Servlet則是個完整的Java類,這個類的service()方法用於生成對客戶端的響應。

普通Servlet類中的service()方法的作用完全等同於JSP生成Servlet類的_jspService()方法,因此原JSP頁面的JSP腳本、靜態HTML內容,在普通Servlet裏都應該轉換成service()方法的代碼或輸出語句原JSP聲明中的內容,對應爲在Servlet中定義的成員變量或成員方法


當Servlet在容器中運行時,其實例的創建及銷燬都不是由程序員決定的,而是由Web容器進行控制的。創建Servlet實例有兩個時機:

1、客戶端第一次請求某個Servlet時,系統創建該Servlet的實例:大部分Servlet都是這種Servlet

2、Web應用啓動時立即創建Servlet實例,即load-on-startup Servleet。這種Servlet通常用於某些後臺服務的Servlet,或者需要攔截很多請求的Servlet;這種Servlet通常作爲應用的基礎Servlet使用,提供重要的後臺服務。<load-on-startup/>元素或loadOnStartup屬性都是接受一個整型值,這個值越小,Servlet就越優先實例化。


Servlet的各個生命週期的作用

1、加載Servlet:Web容器負責加載Servlet,當Web容器啓動時或者是在第一次使用這個Servlet時,容器會負責創建該Servlet的實例,但用戶必須通過部署描述符(web.xml)指定Servlet的位置,成功加載後,Web容器會通過反射的方式對Servlet進行實例化

2、初始化:當一個Servlet被實例化後,容器將調用init()方法初始化這個對象。初始化的目的是爲了讓Servlet對象在處理客戶端請求前完成一些初始化的工作,如建立數據庫連接、讀取資源文件信息等。如果初始化失敗,則此Servlet將被直接卸載。

3、處理服務:當有請求提交時,Servlet將調用service()方法進行處理。在service()方法中,Servlet可以通過ServletRequest接受客戶的請求,也可以利用ServletResponse設置響應信息。

4、銷燬:當Web容器關閉或者檢測到一個Servlet要從容器被刪除時,會自動調用destroy()方法,以便讓該實例釋放掉所佔用的資源。

5、卸載:當一個Servlet調用完destroy()方法後,此實例等待被垃圾收集器回收。如果需要再次使用此Servlet時,會重新調用init()方法初始化。

在正常情況下,Servlet只會初始化一次,而處理服務會調用多次,銷燬也只會調用一次。但如果一個Servlet長時間不適用的話,也會被容器自動銷燬。如果需要再次使用時會重新進行初始化的操作,即在特殊情況下初始化可能會進行多次,銷燬也可能進行多次。


JSP可以完成的功能Servlet都可以完成,但是Servlet具備的很多功能是JSP所不具備的,從使用上看Servlet可以分爲簡單Servlet、過濾Servlet(過濾器)和監聽Servlet(監聽器)三種。JSP可以完成的知識簡單Servlet的功能

使用filter的完整流程是:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。(責任鏈模式

Filter裏的doFilter方法裏的代碼就是從多個Servlet的service()方法裏抽取的通用代碼,通過使用Filter可以實現更好的代碼複用。Filter和Servlet具有完全相同的生命週期行爲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章