Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】
什么是Servlet?
Servlet其實就是一個遵循Servlet開發的java類。Servlet是由服務器調用的,運行在服務器端。
為什么要用到Servlet?
我們編寫java程序想要在網上實現 聊天、發帖、這樣一些的交互功能,普通的java技術是非常難完成的。sun公司就提供了Servlet這種技術供我們使用。
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請求應該包含三個部分:
請求行
請求行: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【瀏覽器告訴服務器,客戶機是從那個頁面來的—反盜鏈】
- 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程序的步驟
- 創建一個自定義類,實現Servlet接口
- 我們發現有5個方法需要重寫,有init【初始化】,destroy【銷毀】,service【服務】,ServletConfig【Servlet配置】,getServletInfo【Servlet信息】。
- 在此一看,發現service()方法是最有可能是寫邏輯代碼的地方。
- 首先寫一個hellword入門先
- 調用ServletResponse對象的方法向瀏覽器輸出HelloWorld
- 配置xml文件,光寫了Servlet是不行的,Tomcat還要知道瀏覽器怎么訪問這個Servlet。
- 訪問自己寫的Servlet程序
Servlet生命周期
-
下面我們看看Servlet的生命周期
-
第一次訪問Servlet,我們發現init()和service()都被調用了
-
第二次訪問Servlet,service()被調用了
-
第三次訪問Servlet,還是service()被調用了
-
當我們關閉Tomcat服務器的時候,destroy()被調用了!
Servlet生命周期可分為5個步驟
簡單總結:
-
只要訪問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生命周期】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: julia(4)-if ,else
- 下一篇: html5杂记(1)