當我們開始jsp/servlet編程之旅之前,我們還需要知道一些關於網絡通訊方面的一些知識。這樣能更加有助於我們的理解,希望大家能看懂我的描述,而不至於在學習的路上一知半解。(手動比❤)
認識Http通信協議
http也叫做超文本傳輸協議,是網頁基本的通信協議,也是我們進行網頁開發的基礎,因此,我們首先要對其進行學習。
我們可以通過一個基本的客戶端與服務器的通信過程來對其進行學習:
由圖中我們可以看出http是基於請求/響應的通訊模型,並且只能是客戶端向服務器端來發送請求,從而獲得我們所需要的文件或者文本。同時由於客戶端在發送請求時只需發送請求方法和路徑,因此http協議極大限度的提高了通信速度。
從http方面來講,我們編程是要認識到其幾個個基本但是非常重要的特點:一個是上文所說的基於請求/響應的通訊模型,還有就是http通信協議是無連接,無狀態的。無連接是指每次連接只會處理一次請求,如果服務器處理完成並且收到客戶端應答后會立即斷開連接。無狀態則是指其對於傳輸的文件沒有記憶能力,一旦后續的處理需要前面所傳信息,則其必須重新進行傳輸。
同時,我們在瀏覽器端使用Http發出請求時,可能會使用以下請求方法,如get、post、head、put、delete方法等,而我們編寫jsp/servlet時最最主要是學習兩種方法,即get、post方法。
get請求
get請求即向服務器取得所需要的資源。當get請求到達服務器程序時,我們所寫的服務器程序一般是根據請求參數來做出正確的響應。
一般一個正確的get請求如下圖所示:
當然,我們的請求參數也不一定只能是一個,如果是多個的情況參數之間要用&來進行分割:
get請求會顯示在地址欄上,但要知道的是get請求可以發送的請求參數長度是有限的,所以如果要傳遞大批量的數據,我們的選擇應當是post請求。
post請求
post請求即請求時發布信息給服務器。請求參數不會暴露在網址后面,而是將參數放在請求主體中,因此我們通常會用其進行大批量數據傳輸和比較隱秘數據的傳輸。
從圖中可以看出,我們寫在表單中通過post方式傳遞的數據存儲在Form Data中。
如何對post和get方式進行選擇?
知道了區別之后,怎么對這兩種方式進行選擇呢?我們主要根據以下四點:
1.傳遞數據量的大小
2.因為get請求參數會放在地址欄上,因此比較敏感或者對網站安全有影響的信息應避免用get方法。
3.當我們需要保存一個網頁成為書簽以便於下次訪問時,最后用get方法,因為post方法無法將參數顯示在地址欄上。
4.瀏覽器有時候會根據對網站內容進行緩存,有時為了防止我們所訪問的內容是原來的緩存,因此可以用post方式進行訪問,如果要用get方式的話也可以用時間戳來進行訪問。