servlet是用java編寫的服務端程序。主要功能在於交互式瀏覽和修改數據,生成動態web內容。狹義是值java語言實現的一個藉口,廣義是指任何實現這個servlet接口的類。
servlet運行於支持java的應用服務器中。從實現上講,servlet可以響應任何類型的請求,但絕大多數情況下servlet只用來擴展基於http協議的web服務器。
工作模式
客戶端發送請求至服務器,服務器啓動並調用servlet,servlet根據客戶端請求生成響應內容並將其傳給服務器,服務器將響應返回客戶端。
通用servlet
servlet由javax.servlet.GenericServlet實現servlet接口。程序設計人員可以通過使用或繼承這個類來實現servlet應用
httpservlet
javax.servlet.http.HttpServlet實現了專門用於響應HTTP請求的servlet,提供了響應請求的doGet()和doPost()方法
生命週期
當servlet被部署在應用服務器中(應用服務器用於管理java組件的部分被抽象成爲容器)以後,由容器控制servlet的生命週期。除非特殊制定,否則在容器啓動的時候
servlet是不會被加載的,servlet只會在第一次請求的時候被加載和實例化。servlet一旦被加載,一般不會從容器中刪除,直到應用服務器關閉或重新啓動。但當容器做內存回收動作時,servlet有可能被刪除。正因爲這個原因,第一次訪問servlet所以的時間要大大多於以後訪問所用的時間。
servlet 1.加載-》2.初始化-》調用-》銷燬
與jsp的關係
java服務器頁面(jsp)是HttpServlet的擴展。由於HttpServlet大多是用來響應HTTP請求,並返回web頁面(例如HTML/XML),所以不可避免地,在編寫servlet時會涉及到大量的HTML內容,這給servlet的書寫效率和可讀性帶了了很大障礙,jsp便是在這個基礎上產生的。其功能是使用HTML的書寫格式,在適當的地方加入java代碼片段,將程序從複雜的HTML中解放出來,更專注與servlet本身的內容。
JSP在首次被訪問的時候被應用服務器轉換爲servlet,在以後的運行中,容器直接調用這個servlet,而不再訪問JSP頁面。JSP的實質仍然是servlet。
java servlet優勢
Servlet可以和其他資源(文件、數據庫、Applet、Java應用程序等)交互,以生成返回給客戶端的響應內容。如果需要,還可以保存請求-響應過程中的信息。
採用Servlet,服務器可以完全授權對本地資源的訪問(如數據庫),並且Servlet自身將會控制外部用戶的訪問數量及訪問性質
Servlet可以是其它服務的客戶端程序,例如,它們可以用於分佈式的應用系統中,可以從本地硬盤,或者通過網絡從遠端硬盤激活Servlet。
Servlet可被鏈接(chain)。一個Servlet可以調用另一個或一系列Servlet,即成爲它的客戶端。
採用Servlet Tag技術,可以在HTML頁面中動態調用Servlet。
Servlet API與協議無關。它並不對傳遞它的協議有任何假設。
像所有的Java程序一樣,Servlet擁有面向對象Java語言的所有優勢
Servlet提供了Java應用程序的所有優勢——可移植、穩健、易開發。使用Servlet 的Tag技術,Servlet能夠生成嵌於靜態HTML頁面中的動態內容。
一個Servlet被客戶端發送的第一個請求激活,然後它將繼續運行於後臺,等待以後的請求。每個請求將生成一個新的線程,而不是一個完整的進程。多個客戶能夠在同一個進程中同時得到服務。一般來說,Servlet進程只是在Web Server卸載時被卸載。