Servlet入门总结
一、了解Servlet的概念
??????? Servlet定義:Servlet是基于Java技術的Web組件,由容器管理并產生動態的內容。Servlet引擎作為WEB服務器的擴展提供支持Servlet的功能。Servlet與客戶端通過Servlet容器實現的請求/響應模型進行交互。
注意:Servlet不是從命令行啟動的,而是由包含Java虛擬機的Web服務器進行加載
1)Servlet是按照Servlet規范編寫的Java類。
2)Servlet應用請求/響應模型,擴展了服務器的功能。
Servlet是WEB應用程序中的一個組件。
??????? Servlet是在JSP之前就存在的運行在服務端的一種Java技術,它是用Java語言編寫的服務器端程序在JSP技術出現之前,Servlet被廣泛地應用來開發動態的Web應用程序
.如今在J2EE項目的開發中,Servlet仍然被廣泛的使用。
?????? Servlet是一種獨立于平臺和協議的服務器端的Java技術,可以用來生成動態的Web頁面與傳統的CGI(公共網關接口)和許多其他類似CGI技術相比,Servlet具有更好的可移植性、更強大的功能,更少的投資,更高的效率,更好的安全性等特點
二、Servlet技術功能
?????? Servlet通過創建一個框架來擴展服務器的能力,以提供在Web上進行請求和響應的服務。當客戶機發送請求至服務器時,服務器可以將請求信息發送給Servlet,并讓Servlet建立起服務器返回給客戶機的響應
當啟動Web服務器或客戶機第一次請求服務時,可以自動裝入Servlet,之后,Servlet繼續運行直到其他客戶機發出請求。Servlet的功能涉及范圍很廣
(1)創建并返回一個包含基于客戶請求性質的動態內容的完整的HTML頁面;
(2)創建可嵌入到現有HTML頁面中的一部分HTML頁面(HTML片段);
(3)與其他服務器資源(包括數據庫和基于Java的應用程序)進行通信;
(4)用多個客戶機處理連接,接收多個客戶機的輸入,并將結果傳遞到多個客戶機上,例如,Servlet可以是多參與者的游戲服務器;
(5)當允許在單連接方式下傳送數據的情況下,在瀏覽器上打開服務器至applet的新連接,并將該連接保持在打開狀態;當允許客戶機和服務器簡單、高效地執行會話的情況下,applet也可以啟動客戶瀏覽器和服務器之間的連接,可以通過定制協議進行通信;
(6)將訂制的處理提供給所有服務器的標準程序。
三、 Servlet技術特點
Servlet技術帶給程序員最大的優勢是它可以處理客戶端傳來的HTTP請求,并返回一個響應
Servlet是一個Java類,Java語言能夠實現的功能,Servlet基本上都可以實現(圖形界面除外)??偟膩碚f,Servlet技術具有以下特點
1.高效。在服務器上僅有一個Java虛擬機在運行,它的優勢在于當多個來自客戶端的請求進行訪問時,Servlet為每個請求分配一個線程而不是進程。
2.方便。Servlet提供了大量的實用工具例程,例如處理很難完成的HTML表單數據、讀取和設置HTTP頭、處理Cookie和跟蹤會話等。
3.跨平臺。Servlet是用Java類編寫的,它可以在不同的操作系統平臺和不同的應用服務器平臺下運行。
4.靈活性和可擴展性。采用Servlet開發的Web應用程序,由于Java類的繼承性、構造函數等特點,使得其應用靈活,可隨意擴展。
6.共享數據。Servlet之間通過共享數據可以很容易地實現數據庫連接池。它能方便地實現管理用戶請求,簡化Session和獲取前一頁面信息的操作。而在CGI之間通信則很差。由于每個CGI程序的調用都開始一個新的進程,調用間通信通常要通過文件進行,因而相當緩慢。同一臺服務器上的不同CGI程序之間的通信也相當麻煩。
7.安全。有些CGI版本有明顯的安全弱點。即使是使用最新的標準和PERL等語言,系統也沒有基本安全框架。而Java定義有完整的安全機制,包括SSL\CA認證、安全政策等規范。
四、 Servlet生命周期
跟客戶端的Applet相似,Servlet(這里Servlet的概念又回到了最原始的含義)也遵循嚴格的生命周期。在每個Servlet實例的生命中有三種類型的事件,這三種事件分別對應于由Servlet引擎所喚醒的三個方法:
2.service()。這是Servlet最重要的方法,是 真正處理請求的地方 。對于每個請求,Servlet引擎將調用Servlet的service方法, 并把Servlet請求對象和Servlet響應對象作為參數傳遞給它。
3.destroy()。這是相對于init的可選方法,當Servlet即將被卸載時由Servlet引擎來調用,這個方法用來清除并釋放在init方法中所分配的資源。
Servlet的生命周期可以被歸納為以下幾步:
(1) 裝載Servlet,這一項操作一般是動態執行的。然而,Servlet通常會提供一個管理的選項,用于在Servlet啟動時強制裝載和初始化特定的Servlet
(2) Server創建一個Servlet實例
(3) Server調用Servlet的init方法
(5) Server創建一個請求對象
(6) Server創建一個響應對象
(8) service方法獲得關于請求對象的信息,處理請求,訪問其他資源,獲得需要的信息
(9) service方法使用響應對象的方法。將響應傳回Server,最終到達客戶端。Service方法可能激活其他方法以處理請求。如doGet,doPost或其他程序員自己開發的方法
(10) 對于更多的客戶端請求,Server創建新的請求和響應對象,仍然激活此servlet的service方法,將這兩個對象作為參數傳遞給它,如此重復以上的循環,但無需再次調用init方法,Servlet一般只初始化一次
(11) 當Server不再需要Servlet時,比如當Server要關閉時,Server調用Servlet的destroy
五、servlet工作過程
Web服務器在與客戶端交互時.Servlet的工作過程是:
1.?????在客戶端對web服務器發出請求
2.???? web服務器接收到請求后將其發送給Servlet
3.???? Servlet容器為此產生一個實例對象并調用ServletAPI中相應的方法來對客戶端HTTP請求進行處理,然后將處理的響應結果返回給WEB服務器.
4.???? web服務器將從Servlet實例對象中收到的響應結構發送回客戶端.
六 、Servlet與JSP區別
??????? 簡單的說,SUN首先發展出SERVLET,其功能比較強勁,體系設計也很先進,只是,它輸出HTML語句還是采用了老的CGI方式,是一句一句輸出,所以,編寫和修改HTML非常不方便。 后來SUN推出了類似于ASP的鑲嵌型的JSP,把JSP TAG鑲嵌到HTML語句中,這樣,就大大簡化和方便了網頁的設計和修改。新型的網絡語言如ASP,PHP,JSP都是鑲嵌型的SCRIPT語言。
1、JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.
2、Servlet完全是JAVA程序代碼構成,擅長于流程控制和事務處理,通過Servlet來生成動態網頁很不直觀.
3、JSP由HTML代碼和JSP標簽構成,可以方便地編寫動態網頁.
????? 因此在實際應用中采用Servlet來控制業務流程,而采用JSP來生成動態網頁.在struts框架中,JSP位于MVC設計模式的視圖層,而Servlet位于控制層.
1、JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。
2、JSP編譯后是“類servlet”。
3、Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP是Java和HTML組合成一個擴展名為.jsp的文件。
4、JSP側重于視圖,Servlet主要用于控制邏輯。
七、Servlet代碼結構
??????? 該Servlet處理的是get請求,如果讀者不理解HTTP,可以把它看成是當用戶在瀏覽器地址欄輸入URL、單擊Web頁面中的鏈接、提交沒有指定method的表單時瀏覽器所發出的請求
??????? Servlet也可以很方便地處理post請求。post請求是提交那些指定了method=“post”的表單時所發出的請求。若要創建一個Servlet,則應使創建的類繼承HttpServlet類,并覆蓋doGet()、doPost()方法之一或全部。doGet()和doPost()方法都有兩個參數,分別為HttpServletRequest類型和HttpServletResponse類型
???????? HttpServletRequest提供訪問有關請求的信息的方法,例如表單數據、HTTP請求頭等。HttpServletResponse除了提供用于指定HTTP應答狀態(200,404等)、應答頭(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一個用于向客戶端發送數據的PrintWriter
???????? 對于簡單的Servlet來說,它的大部分工作是通過println()方法生成向客戶端發送的頁面
???????? 注意:doGet()方法和doPost()方法拋出兩個異常,因此必須在聲明中包含它們。另外還必須導入java.io包(要用到PrintWriter等類)、javax.servlet包(要用到HttpServlet等類)以及javax.servlet.http包要用到(HttpServlet Request類和HttpServletResponse類)。doGet()和doPost()這兩個方法是由service()方法調用的,有時可能需要直接覆蓋service()方法,比如Servlet要處理Get和Post兩種請求時
??????? 如果要開發一個可以處理HTTP請求的Servlet程序,則肯定要繼承HttpServlet類,而且在自定義的Servlet類中還要重寫HttpServlet類中提供的doGet()方法。Servlet程序本身也是按照請求和應答的方式進行的,所以在doGet()方法中定義了兩個參數,即HttpServletRequest和HttpServletResponse,用來接收和回應用戶的請求.
出處:http://blog.csdn.net/evankaka
總結
以上是生活随笔為你收集整理的Servlet入门总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java控制台输入教程~~~~
- 下一篇: 表级锁的mysql读写_Mysql的表级