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

什麼是Serlvet?

Servlet其實就是一個遵循Servlet開發的java類。Serlvet是由服務器調用的運行在服務器端html

爲何要用到Serlvet?

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

HTTP協議

什麼是HTPP協議

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。它是TCP/IP協議的一個應用層協議web

簡單來講,HTTP協議就是客戶端和服務器交互的一種通迅的格式apache

例子:在瀏覽器點擊一個連接,瀏覽器就爲我打開這個連接的網頁。瀏覽器

原理:當在瀏覽器中點擊這個連接的時候,瀏覽器會向服務器發送一段文本告訴服務器請求打開的是哪個網頁。服務器收到請求後,就返回一段文本給瀏覽器,瀏覽器會將該文本解析,而後顯示出來。這段文本就是遵循HTTP協議規範的。緩存

HTTP1.0和HTTP1.1的區別

HTTP1.0協議中,客戶端與web服務器創建鏈接後,只能得到一個web資源tomcat

HTTP1.1協議,容許客戶端與web服務器創建鏈接後,在一個鏈接上獲取多個web資源服務器

HTTP請求

瀏覽器向服務器請求某個web資源時,稱之爲瀏覽器向服務器發送了一個http請求。markdown

一個完整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類

響應頭

  • 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目錄結構

以上圖說明:

  • bbs目錄表明一個web應用
  • bbs目錄下的html,jsp文件能夠直接被瀏覽器訪問
  • WEB-INF目錄下的資源是不能直接被瀏覽器訪問的
  • web.xml文件是web程序的主要配置文件
  • 全部的classes文件都放在classes目錄下
  • jar文件放在lib目錄下

實現Servlet接口編寫Servlet程序

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

編寫Servlet程序的步驟

  • 建立一個自定義類,實現Serlvet接口

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

  • 在此一看,發現service()方法是最有多是寫邏輯代碼的地方。

  • 首先寫一個hellword入門先

  • 調用ServletResponse對象的方法向瀏覽器輸出HelloWorld

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

  • 訪問本身寫的Serlvet程序


Serlvet生命週期

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

  • 第一次訪問**Servlet,咱們發現**init()和service()都被調用了

  • 第二次訪問**Servlet,**service()被調用了

  • 第三次訪問Servlet,仍是service()被調用了

  • 當咱們關閉Tomcat服務器的時候,destroy()被調用了!

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的時候已經幫你重寫好了

相關文章
相關標籤/搜索