[總結]Servlet概述

來源:互聯網
上載者:User

標籤:

一、什麼是Servlet

API上給了下面的解釋: 
A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol. 
根據上面的解釋,我們可以這樣描述Servlet的工作流程:

1、用戶端向服務端發送請求; 
2、服務端將請求資訊發送給Servlet; 
3、Servlet處理請求資訊並產生響應,再傳給伺服器; 
4、伺服器向用戶端發送響應。

二、Servlet是如何工作的

在下面,首先給出下面一張圖(圖1): 

首先,請先不要吐槽這張圖難看。。。 
圖中,需要特別注意的是這幾個類和介面,注意他們都繼承了誰,實現了誰: 
介面:Servlet、ServletRequest(Response)、HttpServletRequest(Response); 
類:HttpServlet 
下面逐一介紹這幾個類和介面:

1、 Servlet介面 
Servlet介面的主要方法有: 
- void:destroy(); 
- ServletConfin:getServletConfig(); 
- java.lang.String:getServletInfo(); 
- void:init(ServletConfig); 
- void:service(ServletRequest, ServletResponse); 
一個Servlet類必須要實現這個介面(圖裡面GenericServlet實現了Servlet介面,基本實現了Servlet的方法,而GenericServlet的子類需要實現service方法),同時,觀察這個介面的方法,通過init(ServletConfig)、service(ServletRequest, ServletResponse)、destroy()這幾個主要方法,我們可以看到Servlet類的生命週期:

1、調用構造方法執行個體化Servlet類; 
2、Servlet容器調用init方法,根據ServletConfig初始化Servlet執行個體; 
3、Servlet容器調用service方法處理ServletRequest對象和ServletResponse對象;(這是Servlet執行個體的核心業務處理,至於ServletRequest對象和ServletResponse對象到底有什麼用,在後文繼續討論,這裡從對象的名字也可以猜出一二了,一個是Request,一個是Response) 
4、Servlet容器調用destroy方法,銷毀Servlet執行個體。

2、ServletRequest和ServletResponse介面 
對於這兩個介面,我主要是分析一下它們的方法,因此它們的介紹我決定直接把API中的介紹搬到這裡:

ServletRequest:Defines an object to provide client request information to a servlet. The servlet container creates a ServletRequest object and passes it as an argument to the servlet’s service method. 
ServletResponse:Defines an object to assist a servlet in sending a response to the client. The servlet container creates a ServletResponse object and passes it as an argument to the servlet’s service method.

  • ServletRequest: 
    對照ServletRequest的把請求資訊封裝的作用來看,ServletRequest介面的方法主要是用來擷取資訊的getter和is類型的方法。 
    • Attribute資訊:getAttribute、getAttributeNames、removeAttribute、setAttribute
    • Character資訊:getCharacterEncoding、setCharacterEncoding
    • Content資訊:getContentLength、getContentType
    • Local資訊:getLocalAddr、getLocalPort、getLocalName
    • Parameter資訊:getParameter、getParameterNames、getParameterValues
    • Remote資訊:getRemoteHost、getRemotePort
    • 其他資訊:getRequestDispatcher、getServerName、getServerPort

這裡主要注意的Attribute和Parameter的區別,請參看:《參數(parameter)和屬性(Attribute)的區別》

  • ServletResponse: 
    如同上面描述一樣,ServletResponse是提供響應的,因此,它應該定義一系列和響應相關的方法,如: setCharacterEncoding、setContentLength、setContentType等; 
    (上面的幾個屬於協議無關的,只要繼承他們並實現Http協議,那麼就可以處理基於HTTP協議的請求和返迴響應結果了)

3、HttpServlet類 
這個類繼承了GenericServlet類,因此這個類的service方法實現了對HTTP協議的支援,這個類的主要功能是接受從瀏覽器發送過來的HTTP請求,並返回HTTP響應。 
它的service方法是這樣的:service(HttpServletRequest req, HttpServletResponse resp);

4、HttpServletRequest和HttpServletResponse介面 
由於這兩個介面是繼承ServletRequest和HttpServletResponse介面 
而來的,它們是基於HTTP協議來封裝請求和響應的,因此這個兩個介面定義的方法一定是根據HTTP協議裡的資訊來寫的,參照這篇文章:《Http詳解》然後對比一下這兩個介面定義的方法就能明了了。

最後: 
Servlet的原理說起來真的很簡單,重要的是如何應用這些方法。我覺得一邊學HTTP協議一邊用這些方法是個不錯的選擇。

[總結]Servlet概述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.