Servlet入門總結及第一個Servlet程序


目錄

一了解Servlet的概念

  二Servlet技術功能

  三 Servlet技術特點

  四 Servlet生命周期

  五servlet工作過程

  六 Servlet與JSP區別

  七Servlet代碼結構

  八 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基本上都可以實現(圖形界面除外)。總的來說,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引擎所喚醒的三個方法:
  1.init()。當Servlet第一次被裝載時,Servlet引擎調用這個Servlet的init()方法,只調用一次。如果某個Sevlet需要特殊的初始化需要。那么Servlet編寫人員可以重寫該方法來執行初始化任務。這是一個可選的方法。如果某個Servlet不需要初始化,那么默認情況下將調用它父類的init方法。系統保證,在init方法成功完成以前,是不會調用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方法
  (4) 一個客戶端請求到達Server
  (5) Server創建一個請求對象
  (6) Server創建一個響應對象
  (7) Server激活Servlet的service方法,傳遞請求和響應對象作為參數
  (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,用來接收和回應用戶的請求。

 

八、 Servlet第一個程序

新建一個工程,注意選擇的類型

好一后,一直next,或者直接finish

新建后的工程目錄

鼠標放在src上,右建proporty,新建一個servlet,記得是web下的servlet

輸入包名和類名

選擇生成的一些方法,不般都不用修改,一直next

生成后的代碼結構

現在我們要來輸入個helloworld:

在上面代碼加上:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("HelloWorld I am Servlet");
    
    }

主目錄下必須要有WEB-INF目錄,WEB-INF目錄下一定有一個符合j2ee標准的web.xml文件,eclipse默認沒有生成,myeclipse默認是有生成 的,我們自己新建一個就行了。

 

選擇到它,然后右鍵,選擇proproty

新建一個XML,命名為web.xml

然后打開新建好的web.xml,內容改成如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
     <!-- 類名 -->
    <servlet-name>HelloWorld</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>com.mucfc.chapter0.HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <!-- 訪問的網址 -->
    <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>

接下來就可以運行了:

注意,eclipse中要先配置好tomcat,配置方法網上有。

把要運行的web項目add到右邊過去就行,然后finsh,就運行了。注意這里我先把之前tomcat給stop了!

然后在瀏覽器里輸入:

http://localhost:8080/ServletLeaningChapter0/servlet/HelloWorld

結果:

啦啦啦

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM