http協議:當使用瀏覽器上網時,每個操作都是瀏覽器向伺服器傳送請求資訊,
伺服器也會對每個請求發出相應的響應資訊,就是返回的頁面等..
一、請求:
請求包含 請求行 和 多個請求頭
請求行:一般是顯示所使用的請求方式 和 http協議版本
請求方式常用的倆鐘 get 和 post
倆鐘請求的區別
以下 get 簡寫為g post簡寫為p
1.g方式提交,url會跟上引數資料,已?開頭,多個引數之間以&分割
p方式提交,url不會跟上引數資料,資料會跟在請求的實體內容中,以&分割
2.g方式提交引數資料有限制,不超過1kb
p方式提交沒有限制
總結:當填寫註冊資訊等表單時,不適合使用g方式,因為內容會跟在url後面不安全
可以使用p方式提交表單,安全。
注意:瀏覽器直接訪問的請求,預設提交方式是get。
只有使用p方式提交請求才會帶有實體內容,g方式沒有。
一般瀏覽器發出請求都會帶有多個請求頭(key,value),
請求頭的作用是:
告訴伺服器該瀏覽器接受什麼引數型別以及描述請求的**,資訊等等...
我們可以過 servlet程式中的 httpservletrequest物件來獲取、解析這些請求資訊。
-- 請求行相關
request.getmethod(); //獲取請求方式,get或post...
request.getrequesturl(); // 獲取請求的url
request.getprotocol(); // 獲取請求的版本協議
-- 請求頭相關
request.getheader("host"); //根據請求頭的名稱獲取請求頭的值
request.getheadernames(); //獲取所有請求頭的名稱,返回乙個enumeration集合
-- 獲取引數內容(post提交的引數都存放在實體內容中)
request.getquerystring(); //get方式獲取引數內容
request.getinputstream(); // 得到實體內容,返回的是乙個輸入流。post用
倆種方式不通用,推薦使用通用的方法,如下
request.getparameternames(); // 獲取所有的引數名稱列表,返回乙個enumeration集合
request.getparameter();
//根據引數名得到引數值(只能獲取乙個值的引數)
request.getparametervalue(); //根據引數名得到引數值,可以獲取多個值得引數,表單中可能含有複選引數
-- 編碼問題
servlet 是執行在 伺服器的。
由於tomcat伺服器內部的編碼格式是 iso-8859-1。
當 瀏覽器的請求傳送過來時,我們通過 servlet 獲取請求引數時,
引數會在 tomcat中重新編碼再返回給我們,這時就出現了編碼問題。
可以設定所獲取的請求的編碼格式,
request.setcharacterencoding("utf-8");
該方法只能對請求實體內容的資料編碼起作用。post提交的資料在實體內容中,
所以該方法對post方法有效! get方法的引數放在uri後面,所以對get方式無效
所以對於get方式提交的引數,需要重新編碼
name = new string(name.getbytes("iso-8859-1"),"utf-8");
同理,當伺服器對瀏覽器發出響應資訊時,也存在編碼問題。
設定伺服器響應給瀏覽器資訊時所使用的編碼
response.setcontenttype("text/html;charset=utf-8");
二、響應
響應資訊包含 響應行和 多個響應頭
響應行:一般是 http版本協議 + 狀態碼
狀態碼:伺服器處理請求的結果(狀態)
常見的狀態:
200 : 表示請求處理完成並完美返回
302: 表示請求需要進一步細化。
404: 表示客戶訪問的資源找不到。
500: 表示伺服器的資源傳送錯誤。(伺服器內部錯誤)
響應頭:響應的內容包括訊息協議的版本,成功或者錯誤編碼加上包含伺服器資訊、實 體元資訊以及可能的實體內容。
我們可以過 servlet程式中的 httpservletresponse物件來修改響應資訊
-- 響應行相關
response.setstatus(404); //修改狀態碼
response.senderror(404); // 傳送404的狀態碼+404的錯誤頁面
--響應頭相關
response.setheader("響應頭","值");
--實體內容相關
response.getwriter().write("內容");
//字元方式
response.getoutputstream().write("內容".getbytes());//位元組方式
通過響應可以實現 重定向功能。
1,傳送乙個302狀態碼,
2,再傳送乙個 location 響應頭,
**如下:
response.setstatus(302);
response.setheader("location","/test/demo.html");
可簡寫為:
response.sendredirect("/test/demo.html");
content-type
告訴瀏覽器用資料型別及內容編碼來解析
設定響應的資料型別及編碼
response.setheader("content-type","text/html");
可簡化為
response.setcontenttype("text/html");
本人只是作為初學者的學習總結,可能對於同為初學者有所幫助,
如若想深入學習,請另外查閱相應文章。
Web前端開發學習筆記(二)
homework2 1.display屬性的block,inline block,inline值的區分 其實真正需要區分的是inline block和inline。都是在同一行內,怎麼區分他們呢?首先要明白塊元素和行內元素很重要的一點區別 塊元素的高度和寬度我們都是可以控制的,而行內元素是不可以的。...
應用層學習筆記二 Web和HTTP
http hypertext transfer protocal 超文字傳輸協議 http由兩個程式實現 乙個客戶端程式和乙個伺服器程式,執行在不同的端系統中,通過交換http報文進行會話。http定義了報文結構和報文交換的方式。一些術語 web瀏覽器 實現了http的客戶端 web伺服器 實現了h...
HTTP學習筆記(二)
一 uri和url的區別 uri unifrom resource identifier 統一資源標誌符。url unifrom resource locator 統一資源定位符。rfc2396對3個單詞的定義 unifrom 規定統一的格式可方便處理多種不同型別的資源。如ftp http reso...