Java Servlet
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
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).
外部連結
- JSR 369 (頁面存檔備份,存於互聯網檔案館) - Java servlet 4.0 documentation
- JSR 340 (頁面存檔備份,存於互聯網檔案館) - Java servlet 3.1 documentation
- JSR 315 (頁面存檔備份,存於互聯網檔案館) - Java servlet 3.0 documentation
- JSR 154 (頁面存檔備份,存於互聯網檔案館) - Java servlet 2.4 documentation
- JSR 53 (頁面存檔備份,存於互聯網檔案館) - Java servlet 2.3 documentation
|