一、HTTP概念作用及特點
- 概念:
- 超文本傳輸協議
- 作用:
- 規範了瀏覽器和服務器數據交互格式
- 特點:
- 簡單快速:基於鍵值對發送,客戶向服務器請求服務,只需要傳送請求方法和路徑,http服務器程序規模小,因而通信速度很快
- 靈活:允許傳輸任意類型的數據對象,傳輸的類型由content-type 標記
- 無連接:每次連接只處理一個一個請求,服務器處理完請求後,接到用戶應答後,斷開連接。節省傳輸時間
HTTP1.1之後支持可持續連接 - 無狀態:協議對事務處理沒有記憶,後續如果需要前面的信息,必須重重,但是可能會導致每次連接傳送的數據量增大,好處是在服務器不需要前面信息的時候應答就比較快了
二、HTTP的交互流程
- 客戶端和服務器創建連接
- 客戶端發送請求數據到服務器端
- 服務器接受請求,進行處理,將處理結果響應客戶端
- 關閉客戶端和服務端的連接(HTTP1.1之後不會立即關閉)
三、請求格式
- 請求頭:請求方式、請求地址、HTTP 版本
- 請求行:客戶端要使用的一些附加信息
- 空行:位於請求行和請求數據之間
- 請求數據:非必須
四、請求方式
HTTP1.0 定義了三種:Get、Post、HEAD方法
HTTP1.1新增了五種:Options、TRACE、DELETE、CONNECT
get:請求指定頁面,返回實體主體
head:類似宇get請求、只是返回的響應中沒有具體內容,用於獲取請求頭
post:像指定資源提交數據進行處理,數據被包含在請求體中。POST請求可能會導致新資源的建立,或者已有資源的修改
put:從客戶端向服務器傳送的數據取代指定的文檔內容
delete:請求服務器刪除指定頁面
connect:預留能夠將連接改爲管道方式的代理服務器
options:允許客戶端查看服務器的性能
trace:回顯服務器收到的請求,主要用於測試或診斷
五、get和post請求方式的區別:
get請求方式:
請求數據會以?的形式隔開拼接再請求頭的請求地址中,不安全,沒有請求實體部分
HTTP協議雖然沒規定請求數據大小,但是瀏覽器對URL長度有所限制,所以Get請求不能攜帶數據
post請求方式:
請求數據在請求實體中進行發送,在url中看不到具體的請求數據,數據封裝到請求數據體中,安全,適合數據量大的數據發送
六、響應:
格式:
響應行(狀態行):HTTP版本、狀態碼、狀態消息
響應頭:消息報頭、客戶端房附加的信息
空行:響應頭和響應實體之間的,必須存在
響應實體:正文,服務器返回給瀏覽器的信息
七、狀態碼
含義:
狀態碼由三個十進制數組成,第一位定義了狀態碼的類型,後兩個數字沒有分類的作用
類型:
1**:信息,服務器收到請求,需要請求者繼續執行操作
2**:成功,操作被成功接受並處理
3**:重定向,需要進一步操作完成請求
4**:客戶端錯誤,請求包含語法錯誤或無法完成請求
5**:服務器錯誤,服務器在處理請求的過程中發生了錯誤
常見的狀態碼:
200 OK 客戶端請求成功
400 Bad Request 客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized 請求未經授權,代碼必須和www-Authenticate包頭域一起使用
403 Forbidden 服務器收到請求,但是拒絕提供服務
404 Not Found 請求資源不存在/輸入了錯誤的URL
500 Internal Server Error 服務器發生不可預期的錯誤
503 Server unavailable 服務器當前不能處理客戶端請求,一段時間後恢復
八、什麼是Servlet
定義:
Servlet指規範了服務器能夠認知的接口規範,廣義上只要實現了這個接口的類,都被稱爲Servlet類
使用:
創建普通java類,並繼承HttpServlet
複寫service方法
在service方法中書寫邏輯代碼
在web.xml配置servlet(目前可直接使用註解)
一、Servlet聲明週期
- 從第一次調用到服務器關閉
- 如果Servlet在web.xml中配置了load-on-startup,生命週期爲從服務器啓動到服務器關閉
注: init方法是對Servlet進行初始化的一個方法,會在Servlet第一次加載進內存時執行
destory方法是在Servlet被銷燬時執行,也就是服務器關閉時
load-on-startup:數字表示加載順序,每個Servlet可能都會配load-on-startup
因爲每次tomcat都會將內容先加載到內存,因此每次修改都需要重啓tomcat服務器
二、Service方法和doGet、doPost方法
- Service方法:
- 可以處理get、post方法是請求,如果servlet中有service方法,系統會有限調用service 方法對請求進行處理
- doGet方法:
- 可以處理get方式的請求
- doPost方法:
- 可以處理post方式的請求
三、Servlet常見錯誤
404錯誤:資源未找到
1、請求地址中servlet的別名拼寫錯誤
2、請求地址中虛擬項目名稱拼寫錯誤
500錯誤:
1、java.lang.ClassNotFoundExeception
解決:
在web.xml中教案servlet類全限定路徑錯誤,目前使用註解,基本及已經解決該問題
2、Servlet中,方法體中代碼出現邏輯語法錯誤
解決:
根據錯誤提示對方法體中的錯誤進行更改
405錯誤:請求方式不支持
1、請求方式和servlet中的方法不匹配所造成
解決:使用service中進行處理,並且不要在service中調用父類service 方法