servlet

什麼是Servlet
Servlet是與JSP—樣在服務器端運行的Java應用程序的一種。Servlet與JSP或者CGI一樣,當瀏覽器端有請求則將其結果傳遞給瀏覽器。實際上執行JSP文件的時候,首先JSP Container會將其轉譯爲Servlet(*.java)文件,並自動編譯解釋執行。JSP中使用到的所有對象都將被轉換爲Servlet或者非Servlet的Java對象,然後被執行,所以執行JSP實際上與執行Servlet是一樣的。從JSP的角度去看的話,Servlet實際上是JSP被解釋執行的中間過程,即JSP實際上是爲了讓Servlet的開發顯得相對容易而採取的腳本語言形式。簡單來說,Servlet就是運行在服務器端的應用程序,Servlet接收來自客戶端的請求,將處理結果返回給客戶端。

Servlet的優點
功能強大。在Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕鬆地完成。Servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。
執行效率高。在傳統的CGI中,每個請求都要啓動一個新的進程,如果CGI程序本身的執行時間較短,啓動進程所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求由一個次要的Java線程處理。而不需要反覆啓動。這也叫“一次加載多次使用”。在傳統CGI中,如果有N個併發的進程對同一CGI程序發出請求,則該CGI程序的代碼在內存中重複裝載了N次;而對於Servlet,處理請求的是N個線程,只需加載一次Servlet類代碼。從而可以提高處理速度。
開發難度低。相對於傳統的CGI,Servlet有很多例程,可以完成許多功能,如網絡緩存、Cookies、還有會話跟蹤,自動讀取Http表頭等功能。開發者在這些功能完備的例程的基礎上,輕鬆地開發功能複雜的Web應用程序。
可移植性好。Servlet是使用Java編寫的,所以很好地繼承了Java的跨平臺性特點。由於ServletAPI的規範很完備,所以幾乎所有的主流Web服務器,如Apache、MicrosoftIIS或者WebStar等,都直接或者通過插件支持Servlet。
性能更強。Servlet比CGI有着更多的選擇,比如緩衝以前的計算結果,保持數據庫連接的活動等等。

Servlet的用途

一個簡單的Servlet可以處理使用HTML FORM在HTTPS上使用POST傳遞的數據,複雜的Servlet(可能還會使用RMI技術)可以用於實現定單輸入和處理系統、生產及庫存數據庫以及一個可能的聯機支付系統。

一個Servlet能併發處理多個請求;他們可以使用在諸如在線會議這樣的同步請求支持系統。

Servlet可以轉送請求給其他的服務器和Servlet,按照任務類型或組織範圍,可以允許被用來在幾個服務器中劃分邏輯上的服務器。

Servlet編寫者們可以定義彼此之間共同工作的激活代理,每個代理者是一個Servlet,而且代理者能夠在它們之間傳送數據。

Servlet與JSP的區別
Servlet是一種在服務器端運行的Java程序,從某種意義上說,它就是服務器端的Applet。所以Servlet可以像Applet一樣作爲一種插件(Plugin)嵌入到Web Server中去,提供諸如HTTP、FTP等協議服務甚至用戶自已定製的協議服務。而JSP是繼Servlet後Sun公司推出的新技術,它是以Servlet爲基礎開發的。Servlet與JSP相比有以下幾點區別:
編程方式不同
Servlet必須在編譯以後才能執行
運行速度不同

Servlet的方法
Servlet一般從Javax包的HttpServlet類擴展而來,在HttpServlet中加入了一些附加的方法,這些方法可以被協助處理HTTP基本請求的HttpServlet類中的方法service自動地調用。這些方法有: doGet、doPost、doPut、doDelete 、doHead 、doOptions 、doTrace 。

doGet用來處理HTTP的GET請求。這個GET操作僅僅允許客戶從HTTP server上取得GET資源。重載此方法的用戶自動允許支持方法HEAD。這個GET操作被認爲是安全的,沒有任何的負面影響,對用戶來說是很可靠的。

doPost用來處理HTTP的POST請求。這個POST操作包含了在必須通過此Servlet執行的請求中的數據。由於它不能立即取得資源,所以對於那些涉及到安全性的用戶來說,通過POST請求操作會有一些副作用。

doPut用來處理HTTP的PUT請求。此PUT操作模擬通過FTP發送一個文件。對於那些涉及到安全性的用戶來說,通過PUT請求操作也會有一些副作用。

doDelete用來處理HTTP的DELETE請求。此操作允許客戶端請求一個從server移出的URL。對於那些涉及到安全性的用戶來說,通過DELETE請求操作會有一些副作用。

doHead用來處理HTTP的HEAD請求。缺省地,它會在無條件的GET方法執行時運行,但是不返回任何數據到客戶端。只返回包含內容信息的長度的header。由於用到GET操作,此方法應該是很安全的(沒有副作用)也是可重複使用的。

doOptions用來處理HTTP的OPTIONS請求。此操作自動地決定支持什麼HTTP方法。比如說,如果讀者創建HttpServlet的子類並重載方法doGet,然後方法doOptions會返回下面的header:GET、HEAD、TRACE和OPTIONS。

doTrace用來處理HTTP的TRACE請求。此方法的缺省實現產生一個包含所有在trace請求中的header的信息的應答(response)。在開發Servlet時,多數情況下需要重載此方法。



















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