值得信赖的彩票平台

Servlet 教程


閱讀(902.3k) 收藏 (162)

多端閱讀:

  • 在PC/MAC上查看 《Servlet 教程》:
    下載Servlet 教程離線版客戶端,進入客戶端后通過搜索當前教程手冊的名稱并下載,就可以查看當前離線教程文檔。
  • 在手機上查看《Servlet 教程》:
  • 在手機APP上查看 《Servlet 教程》:

    下載w3cschool手機App端 請從各大安卓應用商店、蘋果App Store搜索并下載w3cschool手機客戶端,在App中搜索當前教程手冊的名稱查看。

    App下載

手冊簡介:

運行在 Web 服務器或應用服務器上的程序。

手冊說明:

201610261617519395


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 類    別 程序 環    境 Java applet 平    臺 Java Web Server


由來

Servlet 是在服務器上運行的小程序。這個詞是在 Java applet的環境中創造的,Java applet 是一種當作單獨文件跟網頁一起發送的小程序,它通常用于在客戶端運行,結果得到為用戶進行運算或者根據用戶互作用定位圖形等服務。
服務器上需要一些程序,常常是根據用戶輸入訪問數據庫的程序。這些通常是使用公共網關接口(Common Gateway Interface,CGI)應用程序完成的。然而,在服務器上運行 Java,這種程序可使用 Java 編程語言實現。在通信量大的服務器上,JavaServlet 的優點在于它們的執行速度更快于 CGI 程序。各個用戶請求被激活成單個程序中的一個線程,而無需創建單獨的進程,這意味著服務器端處理請求的系統開銷將明顯降低。
實現過程
最早支持 Servlet 技術的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開始支持標準的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數據,生成動態 Web 內容。這個過程為:
1) 客戶端發送請求至服務器端;
2) 服務器將請求信息發送至 Servlet;
3) Servlet 生成響應內容并將其傳給服務器。響應內容動態生成,通常取決于客戶端的請求;
4) 服務器將響應返回給客戶端。
Servlet 看起來像是通常的 Java 程序。Servlet 導入特定的屬于 Java Servlet API 的包。因為是對象字節碼,可動態地從網絡加載,可以說 Servlet 對 Server 就如同 Applet對 Client 一樣,但是,由于 Servlet 運行于 Server 中,它們并不需要一個圖形用戶界面。從這個角度講,Servlet 也被稱為 FacelessObject。
一個 Servlet 就是 Java 編程語言中的一個類,它被用來擴展服務器的性能,服務器上駐留著可以通過“請求-響應”編程模型來訪問的應用程序。雖然 Servlet 可以對任何類型的請求產生響應,但通常只用來擴展 Web 服務器的應用程序。
目前最新版本為 3.1。


命名

Servlet 的命名可以看出 sun 命名的特點,如 Applet 表示小應用程序;Scriptlet = Script + Applet,表示小腳本程序;同樣 Servlet = Service + Applet,表示小服務程序。
生命周期編輯
客戶端請求該 Servlet;
加載 Servlet 類到內存;
實例化并調用init()方法初始化該 Servlet;
service()(根據請求方法不同調用doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions());
destroy()。
加載和實例化 Servlet。這項操作一般是動態執行的。然而,Server 通常會提供一個管理的選項,用于在 Server 啟動時強制裝載和初始化特定的 Servlet。
Server 創建一個 Servlet的實例
第一個客戶端的請求到達 Server
Server 調用 Servlet 的 init() 方法(可配置為 Server 創建 Servlet 實例時調用,在 web.xml 中 <servlet> 標簽下配置 <load-on-startup> 標簽,配置的值為整型,值越小 Servlet 的啟動優先級越高)
一個客戶端的請求到達 Server
Server 創建一個請求對象,處理客戶端請求
Server 創建一個響應對象,響應客戶端請求
Server 激活 Servlet 的 service() 方法,傳遞請求和響應對象作為參數
service() 方法獲得關于請求對象的信息,處理請求,訪問其他資源,獲得需要的信息
service() 方法使用響應對象的方法,將響應傳回Server,最終到達客戶端。service()方法可能激活其它方法以處理請求,如 doGet() 或 doPost() 或程序員自己開發的新的方法。
對于更多的客戶端請求,Server 創建新的請求和響應對象,仍然激活此 Servlet 的 service() 方法,將這兩個對象作為參數傳遞給它。如此重復以上的循環,但無需再次調用 init() 方法。一般 Servlet 只初始化一次(只有一個對象),當 Server 不再需要 Servlet 時(一般當 Server 關閉時),Server 調用 Servlet 的 destroy() 方法。


工作模式

客戶端發送請求至服務器
服務器啟動并調用 Servlet,Servlet 根據客戶端請求生成響應內容并將其傳給服務器
服務器將響應返回客戶端


比較

與 Applet 的比較
相似之處:
* 它們不是獨立的應用程序,沒有 main() 方法。
* 它們不是由用戶或程序員調用,而是由另外一個應用程序(容器)調用。
* 它們都有一個生存周期,包含 init() 和 destroy() 方法。
不同之處:
* Applet具有很好的圖形界面(AWT),與瀏覽器一起,在客戶端運行。
* Servlet 則沒有圖形界面,運行在服務器端。
與 CGI 比較
與傳統的 CGI 和許多其他類似 CGI 的技術相比,Java Servlet 具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。在未來的技術發展過程中,Servlet 有可能徹底取代 CGI。
在傳統的 CGI中,每個請求都要啟動一個新的進程,如果 CGI 程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在 Servlet 中,每個請求由一個輕量級的 Java 線程處理(而不是重量級的操作系統進程)。
在傳統 CGI 中,如果有 N 個并發的對同一 CGI程序的請求,則該CGI程序的代碼在內存中重復裝載了 N 次;而對于 Servlet,處理請求的是 N 個線程,只需要一份 Servlet 類代碼。在性能優化方面,Servlet 也比 CGI 有著更多的選擇。
* 方便
Servlet 提供了大量的實用工具例程,例如自動地解析和解碼 HTML 表單數據、讀取和設置 HTTP頭、處理Cookie、跟蹤會話狀態等。
* 功能強大
在Servlet中,許多使用傳統 CGI 程序很難完成的任務都可以輕松地完成。例如,Servlet 能夠直接和 Web服務器交互,而普通的 CGI 程序不能。Servlet 還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。
* 可移植性好
Servlet 用 Java 編寫,Servlet API具有完善的標準。因此,為 IPlanet Enterprise Server 寫的 Servlet 無需任何實質上的改動即可移植到 Apache、MicrosoftIIS 或者 WebStar。幾乎所有的主流服務器都直接或通過插件支持 Servlet。
* 節省投資
不僅有許多廉價甚至免費的 Web 服務器可供個人或小規模網站使用,而且對于現有的服務器,如果它不支持 Servlet 的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。


與 JSP 比較

JSP 和 Servlet 的區別到底在應用上有哪些體現,很多人搞不清楚。簡單的說,SUN 首先發展出 Servlet,其功能比較強勁,體系設計也很先進,只是,它輸出 HTML 語句還是采用了老的 CGI 方式,是一句一句輸出,所以,編寫和修改 HTML 非常不方便。
Java Server Pages(JSP)是一種實現普通靜態HTML 和動態 HTML 混合編碼的技術,JSP 并沒有增加任何本質上不能用 Servlet 實現的功能。但是,在 JSP 中編寫靜態HTML 更加方便,不必再用 println語 句來輸出每一行 HTML 代碼。更重要的是,借助內容和外觀的分離,頁面制作中不同性質的任務可以方便地分開:比如,由頁面設計者進行 HTML設計,同時留出供 Servlet 程序員插入動態內容的空間。
后來 SUN 推出了類似于 ASP 的鑲嵌型的 JSP,把 JSP TAG 鑲嵌到 HTML 語句中,這樣,就大大簡化和方便了網頁的設計和修改。新型的網絡語言如 ASP,PHP,JSP 都是鑲嵌型的語言。 這是 JSP 和 Servlet 區別的運作原理層面。
從網絡三層結構的角度看 JSP 和 Servlet 的區別,一個網絡項目最少分三層:data layer(數據層),business layer(業務層),presentation layer(表現層)。當然也可以更復雜。Servlet 用來寫 business layer 是很強大的,但是對于寫 presentation layer 就很不方便。JSP 則主要是為了方便寫 presentation layer 而設計的。當然也可以寫 business layer。寫慣了 ASP,PHP,CGI的朋友,經常會不自覺的把 presentation layer 和 business layer 混在一起。
根據 SUN 自己的推薦,JSP中應該僅僅存放與 presentation layer 有關的東西,也就是說,只放輸出 HTML 網頁的部分。而所有的數據計算,數據分析,數據庫聯結處理,統統是屬于 business layer,應該放在 Java BEANS 中。通過 JSP 調用 Java BEANS,實現兩層的整合。
實際上,微軟前不久推出的 DNA 技術,簡單說,就是 ASP+COM/DCOM 技術。與J SP+BEANS 完全類似,所有的 presentation layer 由 ASP 完成,所有的 business layer 由 COM/DCOM 完成。通過調用,實現整合。
為什么要采用這些組件技術呢?因為單純的 ASP/JSP 語言是非常低效率執行的,如果出現大量用戶點擊,純 SCRIPT 語言很快就到達了他的功能上限,而組件技術就能大幅度提高功能上限,加快執行速度。
另外一方面,純 SCRIPT 語言將 presentation layer 和 business layer 混在一起,造成修改不方便,并且代碼不能重復利用。如果想修改一個地方,經常會牽涉到十幾頁 code,采用組件技術就只改組件就可以了。
綜上所述,Servlet 是一個早期的不完善的產品,寫 business layer 很好,寫 presentation layer 就很臭,并且兩層混雜。
所以,推出JSP+BEAN,用 JSP 寫 presentation layer,用 BEAN 寫 business layer。SUN 自己的意思也是將來用 JSP 替代 Servlet。這是技術更新方面 JSP 和 Servlet 的區別。
可是,這不是說,學了 Servlet 沒用,實際上,你還是應該從 Servlet 入門,再上 JSP,再上 JSP+BEAN。
強調的是:學了JSP,不會用 Java BEAN 并進行整合,等于沒學。大家多花點力氣在 JSP+BEAN 上。
我們可以看到,當 ASP+COM 和 JSP+BEAN 都采用組件技術后,所有的組件都是先進行編譯,并駐留內存,然后快速執行。所以,大家經常吹的 Servlet/JSP 先編譯駐內存后執行的速度優勢就沒有了。
反之,ASP+COM+IIS+NT 緊密整合,應該會有較大的速度優勢呈現。而且,ASP+COM+IIS+NT 開發效率非常高,雖然bug 很多。
那么,為什么還用 JSP+BEAN?因為 Java 實在前途遠大。微軟分拆后,操作系統將群雄并起,應用軟件的開發商必定要找一個通用開發語言進行開發,Java 一統天下的時機就到了。如果微軟分拆順利,從中分出的應用軟件公司將成為 Java 的新領導者。目前的 Java 大頭 SUN 和 IBM 都死氣沉沉,令人失望。希望新公司能注入新活力。不過,新公司很有可能和舊 SUN 展開 Java 標準大戰,雙方各自制定標準,影響 Java 跨平臺。
簡單分析了一下 JSP 和 Servlet 的區別和 Java Web 開發方面的發展。隨著機器速度越來越快,Java 的速度劣勢很快就可以被克服。


規范

1.簡化開發
2.便于部署
3.支持 Web2.0 原則
為了簡化開發流程,Servlet 3.0 引入了注解(annotation),這使得 web 部署描述符 web.xml 不再是必須的選擇。
Pluggability可插入性
當使用任何第三方的框架,如 Struts,JSF 或 Spring,我們都需要在 web.xml 中添加對應的 Servlet 的入口。這使得 web 描述符笨重而難以維護。Servlet3.0 的新的可插入特性使得 web 應用程序模塊化而易于維護。通過 web fragment 實現的可插入性減輕了開發人員的負擔,不需要再在 web.xml 中配置很多的 Servlet 入口。
Asynchronous Processing 異步處理
另外一個顯著的改變就是 Servlet 3.0 支持異步處理,這對 AJAX 應用程序非常有用。當一個 Servlet 創建一個線程來處理某些請求的時候,如查詢數據庫或消息連接,這個線程要等待直到獲得所需要的資源才能夠執行其他的操作。異步處理通過運行線程執行其他的操作來避免了這種阻塞。
Apart from the features mentioned here, several other enhancements have been made to the existing API. The sections towards the end of the article will explore these features one by one in detail.
除了這些新特性之外, Servlet 3.0對已有的 API 也做了一些改進,在本文的最后我們會做介紹。
Annotations in Servlet Servlet中使用注解
Servlet 3.0 的一個主要的改變就是支持注解。使用注解來定義 Servlet 和 filter 使得我們不用在 web.xml 中定義相應的入口。
@WebServlet
@WebServlet 用來定義 web 應用程序中的一個 Servlet。這個注解可以應用于繼承了 HttpServlet。這個注解有多個屬性,例如 name,urlPattern, initParams,我們可以使用者的屬性來定義 Servlet 的行為。urlPattern 屬性是必須指定的。


常見容器

Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss 等等。(提供了 Servlet 功能的服務器,叫做 Servlet 容器。對 web 程序來說,Servlet 容器的作用就相當于桌面程序里操作系統的作用,都是提供一些編程基礎設施)


附加資料

Servlet 官網:http://www.oracle.com/technetwork/java/index-jsp-135475.html

Servlet API文檔:http://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html

Servlet教程:http://www.sdsyxdcdy.com/servlet/



更新記錄:

返回w3cschool官網主頁

在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號

意見反饋
返回頂部
值得信赖的彩票平台

              汉阴县| 平乐县| 东山县| 台南市| 文山县| 襄汾县| 潮安县| 徐汇区| 琼结县| 漠河县| 张北县| 裕民县| 苍南县| 常州市| 绥芬河市| 柘城县| 哈尔滨市| 桐柏县|