Java Servlet
Servlet(Server Applet),全稱Java Servlet。是用Java編寫的服務器端程序。其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類別,一般情況下,人們將Servlet理解為後者。
Servlet運行於支持Java的應用服務器中。從實現上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議的Web服務器。
最早支持Servlet標準的是JavaSoft的Java Web Server。此後,一些其它的基於Java的Web服務器開始支持標準的Servlet。
歷史
編輯Servlet API 版本 | 發布日期 | 平台 | 重要變化 |
---|---|---|---|
Servlet 5.0 | 2020年6月12日 (頁面存檔備份,存於網際網路檔案館) | Jakarta EE 9 | 遷移包名到「jakarta.servlet 」
|
Servlet 4.0.3 | 2019年3月13日 (頁面存檔備份,存於網際網路檔案館) | Jakarta EE 8 | 去除「Java」商標 |
Servlet 4.0 | 2017年9月 (頁面存檔備份,存於網際網路檔案館) | Java EE 8 | HTTP/2 |
Servlet 3.1 | 2013年5月 (頁面存檔備份,存於網際網路檔案館) | Java EE 7 | Non-blocking I/O, HTTP protocol upgrade mechanism (WebSocket)[1] |
Servlet 3.0 | 2009年12月 | Java EE 6, Java SE 6 | Pluggability, Ease of development, Async Servlet, Security, File Uploading |
Servlet 2.5 | 2005年9月 | Java EE 5, Java SE 5 | Requires Java SE 5, supports annotation |
Servlet 2.4 | 2003年11月 | J2EE 1.4, J2SE 1.3 | web.xml uses XML Schema |
Servlet 2.3 | 2001年8月 | J2EE 1.3, J2SE 1.2 | Addition of Filter
|
Servlet 2.2 | 1999年8月 | J2EE 1.2, J2SE 1.2 | Becomes part of J2EE, introduced independent web applications in .war files |
Servlet 2.1 | 1998年11月 | Unspecified | First official specification, added RequestDispatcher , ServletContext
|
Servlet 2.0 | JDK 1.1 | Part of Java Servlet Development Kit 2.0 | |
Servlet 1.0 | 1997年6月 |
工作模式
編輯- 客戶端發送請求至服務器
- 服務器啟動並調用Servlet,Servlet根據客戶端請求生成響應內容並將其傳給服務器
- 服務器將響應返回客戶端
- 其他
通用Servlet
編輯一般來說,通用Servlet由javax.servlet.GenericServlet實作Servlet介面。程序設計人員可以通過使用或繼承這個類來實現通用Servlet應用。
HttpServlet
編輯javax.servlet.http.HttpServlet實現了專門用於響應HTTP請求的Servlet,提供了響應對應HTTP標準請求的doGet()、doPost()等方法。
生命周期
編輯當servlet被部署在應用服務器中(應用服務器中用於管理Java組件的部分被抽象成為容器)以後,由容器控制servlet的生命周期。除非特殊指定,否則在容器啟動的時候,servlet是不會被加載的,servlet只會在第一次請求的時候被加載和實例化。servlet一旦被加載,一般不會從容器中刪除,直至應用服務器關閉或重新啟動。但當容器做記憶體回收動作時,servlet有可能被刪除。也正是因為這個原因,第一次訪問servlet所用的時間要大大多於以後訪問所用的時間。
servlet在服務器的運行生命周期為,在第一次請求(或其實體被內存垃圾回收後再被訪問)時被加載並執行一次初始化方法,跟着執行正式運行方法,之後會被常駐並每次被請求時直接執行正式運行方法,直到服務器關閉或被清理時執行一次銷毀方法後實體銷毀。
與JSP的關係
編輯Java服務器頁面(JSP)是HttpServlet的擴展。由於HttpServlet大多是用來響應HTTP請求,並返回Web頁面(例如HTML、XML),所以不可避免地,在編寫servlet時會涉及大量的HTML內容,這給servlet的書寫效率和可讀性帶來很大障礙,JSP便是在這個基礎上產生的。其功能是使用HTML的書寫格式,在適當的地方加入Java代碼片段,將程序員從複雜的HTML中解放出來,更專注於servlet本身的內容。
JSP在首次被訪問的時候被應用服務器轉換為servlet,在以後的運行中,容器直接調用這個servlet,而不再訪問JSP頁面。JSP的實質仍然是servlet。
參見
編輯參考文獻
編輯- ^ What's new in Servlet 3.1? - Java EE 7 moving forward. [2016-09-07]. (原始內容存檔於2017-01-17).