什麼是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請求應該包含三個部分:網絡
- 請求行【描述客戶端的請求方式、請求的資源名稱,以及使用的HTTP協議版本號】
- 多個消息頭【描述客戶端請求哪臺主機,以及客戶端的一些環境信息等】
- 一個空行
請求行
請求行: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響應應該包含四個部分:
- 一個狀態行【用於描述服務器對請求的處理結果。】
- 多個消息頭【用於描述服務器的基本信息,以及數據的描述,服務器經過這些數據的描述信息,能夠通知客戶端如何處理等一下子它回送的數據】
- 一個空行
- 實體內容【服務器向客戶端回送的數據】
狀態行
格式: 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程序的步驟
咱們發現有5個方法須要重寫,有init【初始化】,destroy【銷燬】,service【服務】,ServletConfig【Servlet配置】,getServletInfo【Serlvet信息】。
在此一看,發現service()方法是最有多是寫邏輯代碼的地方。
首先寫一個hellword入門先
調用ServletResponse對象的方法向瀏覽器輸出HelloWorld
- 配置xml文件,光寫了Servlet是不行的,Tomcat還要知道瀏覽器怎麼訪問這個Servlet。
Serlvet生命週期
- 第二次訪問**Servlet,**service()被調用了
- 第三次訪問Servlet,仍是service()被調用了
- 當咱們關閉Tomcat服務器的時候,destroy()被調用了!
Servlet生命週期可分爲5個步驟
- 加載Servlet。當Tomcat第一次訪問Servlet的時候,Tomcat會負責建立Servlet的實例
- 初始化。當Servlet被實例化後,Tomcat會調用init()方法初始化這個對象
- 處理服務。當瀏覽器訪問Servlet的時候,Servlet**會調用service()方法處理請求**
- 銷燬。當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調用destroy()方法,讓該實例釋放掉所佔的資源。一個Servlet若是長時間不被使用的話,也會被Tomcat自動銷燬
卸載。當Servlet調用完destroy()方法後,等待垃圾回收。若是有須要再次使用這個Servlet,會從新調用init()方法進行初始化操做。
- 簡單總結:**只要訪問Servlet,service()就會被調用。init()只有第一次訪問Servlet的時候纔會被調用。
destroy()只有在Tomcat關閉的時候纔會被調用。**
繼承HttpServlet編寫Servlet程序
在上面咱們實現Servlet接口,要實現5個方法。這樣太麻煩了!而HttpServlet類已經實現了Servlet接口的全部方法,編寫Servlet時,只須要繼承HttpServlet,重寫你須要的方法便可,而且它在原有Servlet接口上添加了一些與HTTP協議處理方法,它比Servlet接口的功能更爲強大。