Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

Java3y發表於2018-02-04

什麼是Serlvet?

Servlet其實就是一個遵循Servlet開發的java類。Serlvet是由伺服器呼叫的執行在伺服器端

為什麼要用到Serlvet?

我們編寫java程式想要在網上實現 聊天、發帖、這樣一些的互動功能,普通的java技術是非常難完成的。sun公司就提供了Serlvet這種技術供我們使用。

HTTP協議

什麼是HTPP協議

超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。所有的WWW檔案都必須遵守這個標準。它是TCP/IP協議的一個應用層協議

簡單來說,HTTP協議就是客戶端和伺服器互動的一種通迅的格式

例子:在瀏覽器點選一個連結,瀏覽器就為我開啟這個連結的網頁。

原理:當在瀏覽器中點選這個連結的時候,瀏覽器會向伺服器傳送一段文字,**告訴伺服器請求開啟的是哪一個網頁。伺服器收到請求後,就返回一段文字給瀏覽器,瀏覽器會將該文字解析,然後顯示出來。**這段文字就是遵循HTTP協議規範的。

HTTP1.0和HTTP1.1的區別

HTTP1.0協議中,客戶端與web伺服器建立連線後,只能獲得一個web資源【短連線,獲取資源後就斷開連線】

HTTP1.1協議,允許客戶端與web伺服器建立連線後,在一個連線上獲取多個web資源【保持連線】

HTTP請求

瀏覽器向伺服器請求某個web資源時,稱之為瀏覽器向伺服器傳送了一個http請求。

一個完整http請求應該包含三個部分:

  1. 請求行【描述客戶端的請求方式請求的資源名稱,以及使用的HTTP協議版本號
  2. 多個訊息頭【描述客戶端請求哪臺主機,以及客戶端的一些環境資訊等】
  3. 一個空行

請求行

請求行:GET /java.html HTTP/1.1

請求行中的GET稱之為請求方式,請求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT。

常用的有:POST,GET

一般來說,當我們點選超連結,通過位址列訪問都是get請求方式。通過表單提交的資料一般是post方式

可以簡單理解GET方式用來查詢資料,POST方式用來提交資料get的提交速度比post快

GET方式:在URL地址後附帶的引數是有限制的,其資料容量通常不能超過1K

POST方式:可以在請求的實體內容中向伺服器傳送資料傳送的資料量無限制

請求頭

  • Accept: text/html,image/* 【瀏覽器告訴伺服器,它支援的資料型別】
  • Accept-Charset: ISO-8859-1 【瀏覽器告訴伺服器,它支援哪種字符集
  • Accept-Encoding: gzip,compress 【瀏覽器告訴伺服器,它支援的壓縮格式
  • Accept-Language: en-us,zh-cn 【瀏覽器告訴伺服器,它的語言環境】
  • Host: www.it315.org:80【瀏覽器告訴伺服器,它的想訪問哪臺主機】
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴伺服器,快取資料的時間】
  • Referer: http://www.it315.org/index.jsp【瀏覽器告訴伺服器,客戶機是從那個頁面來的---反盜鏈
  • 8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【瀏覽器告訴伺服器,瀏覽器的核心是什麼】
  • Cookie【瀏覽器告訴伺服器,帶來的Cookie是什麼
  • Connection: close/Keep-Alive 【瀏覽器告訴伺服器,請求完後是斷開連結還是保持連結】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴伺服器,請求的時間】

HTTP響應

一個HTTP響應代表著伺服器向瀏覽器回送資料

一個完整的HTTP響應應該包含四個部分:

  1. 一個狀態行【用於描述伺服器對請求的處理結果。
  2. 多個訊息頭【用於描述伺服器的基本資訊,以及資料的描述伺服器通過這些資料的描述資訊,可以通知客戶端如何處理等一會兒它回送的資料
  3. 一個空行
  4. 實體內容【伺服器向客戶端回送的資料

狀態行

格式: HTTP版本號 狀態碼 原因敘述

狀態行:HTTP/1.1 200 OK

狀態碼用於表示伺服器對請求的處理結果,它是一個三位的十進位制數。響應狀態碼分為5類

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

響應頭

  • Location: http://www.it315.org/index.jsp 【伺服器告訴瀏覽器要跳轉到哪個頁面
  • Server:apache tomcat【伺服器告訴瀏覽器,伺服器的型號是什麼】
  • Content-Encoding: gzip 【伺服器告訴瀏覽器資料壓縮的格式
  • Content-Length: 80 【伺服器告訴瀏覽器回送資料的長度】
  • Content-Language: zh-cn 【伺服器告訴瀏覽器,伺服器的語言環境】
  • Content-Type: text/html; charset=GB2312 【伺服器告訴瀏覽器,回送資料的型別
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【伺服器告訴瀏覽器該資源上次更新時間】
  • Refresh: 1;url=http://www.it315.org【伺服器告訴瀏覽器要定時重新整理
  • Content-Disposition: attachment; filename=aaa.zip【伺服器告訴瀏覽器以下載方式開啟資料
  • Transfer-Encoding: chunked 【伺服器告訴瀏覽器資料以分塊方式回送】
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search【伺服器告訴瀏覽器要儲存Cookie
  • Expires: -1【伺服器告訴瀏覽器不要設定快取
  • Cache-Control: no-cache 【伺服器告訴瀏覽器不要設定快取
  • Pragma: no-cache 【伺服器告訴瀏覽器不要設定快取
  • Connection: close/Keep-Alive 【伺服器告訴瀏覽器連線方式】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【伺服器告訴瀏覽器回送資料的時間】

Servlet的作用

Servlet帶給我們最大的作用就是能夠處理瀏覽器帶來HTTP請求,並返回一個響應給瀏覽器,從而實現瀏覽器和伺服器的互動


JAVAWEB目錄結構

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

以上圖說明:

  • bbs目錄代表一個web應用
  • bbs目錄下的html,jsp檔案可以直接被瀏覽器訪問
  • WEB-INF目錄下的資源是不能直接被瀏覽器訪問的
  • web.xml檔案是web程式的主要配置檔案
  • 所有的classes檔案都放在classes目錄下
  • jar檔案放在lib目錄下

實現Servlet介面編寫Servlet程式

程式我都是由idea下寫,首先要在idea上配置Tomcat,在我別的博文中有教程!

編寫Servlet程式的步驟

  • 建立一個自定義類,實現Serlvet介面

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 我們發現有5個方法需要重寫,有init【初始化】,destroy【銷燬】,service【服務】,ServletConfig【Servlet配置】,getServletInfo【Serlvet資訊】。

  • 在此一看,發現service()方法是最有可能是寫邏輯程式碼的地方。

  • 首先寫一個hellword入門先

  • 呼叫ServletResponse物件的方法向瀏覽器輸出HelloWorld

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 配置xml檔案,光寫了Servlet是不行的,Tomcat還要知道瀏覽器怎麼訪問這個Servlet。

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 訪問自己寫的Serlvet程式

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】


Serlvet生命週期

  • 下面我們看看Servlet的生命週期

    Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 第一次訪問Servlet,我們發現init()和service()都被呼叫了

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 第二次訪問Servlet,service()被呼叫了

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 第三次訪問Servlet,還是service()被呼叫了

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

  • 當我們關閉Tomcat伺服器的時候,destroy()被呼叫了!

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】

Servlet生命週期可分為5個步驟

  1. 載入Servlet。當Tomcat第一次訪問Servlet的時候,Tomcat會負責建立Servlet的例項
  2. 初始化。當Servlet被例項化後,Tomcat會呼叫init()方法初始化這個物件
  3. 處理服務。當瀏覽器訪問Servlet的時候,Servlet 會呼叫service()方法處理請求
  4. 銷燬。當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動呼叫destroy()方法,讓該例項釋放掉所佔的資源。一個Servlet如果長時間不被使用的話,也會被Tomcat自動銷燬
  5. 解除安裝。當Servlet呼叫完destroy()方法後,等待垃圾回收。如果有需要再次使用這個Servlet,會重新呼叫init()方法進行初始化操作
  • 簡單總結:只要訪問Servlet,service()就會被呼叫。init()只有第一次訪問Servlet的時候才會被呼叫。 destroy()只有在Tomcat關閉的時候才會被呼叫。

繼承HttpServlet編寫Servlet程式

在上面我們實現Servlet介面,要實現5個方法。這樣太麻煩了!而HttpServlet類已經實現了Servlet介面的所有方法,編寫Servlet時,只需要繼承HttpServlet,重寫你需要的方法即可,並且它在原有Servlet介面上新增了一些與HTTP協議處理方法,它比Servlet介面的功能更為強大

  • 一般我們開發的時候,都是重寫doGet()和doPost()方法的。對於idea而言,建立Servlet的時候已經幫你重寫好了

Servlet第一篇【介紹Servlet、HTTP協議、WEB目錄結構、編寫入門Servlet程式、Servlet生命週期】


如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y

相關文章