Http
概念:Hyper Test Transfer Protocol 超文本傳輸協議
* 傳輸協議:定義了,客戶端和服務器端通訊時,發送數據的格式
* 特色:
1. 基於TCP/IP的高級協議
2. 默認端口號:80
3. 基於請求響應/模型的 一次請求對應一次響應
4. 無狀態的:每次請求之間相互獨立,不能去交互數據
* 歷史版本:區別:1.1比1.0節省資源,複用鏈接,而1.0每一次請求創建新的鏈接
* 請求消息數據格式:
1.請求行:
請求方式 請求url 請求協議/版本
GET/login.html HTTP/1.1
* 情求方式:
* HTTP協議有7種請求方式,常見兩種
* GET:
1. 請求參數在請求行中,在url後
2. 請求的url長度是有限制的
3. 不太安全
* POST:
1. 請求參數在請求體中
2. 請求的url長度是沒有限制的
3. 相對安全
2.請求頭:客戶端瀏覽器告訴服務器一些信息。頭是固定的,值不同
請求頭名稱:請求頭值
* 常見的請求頭
1. User-Agent:瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息
* 能夠在服務器端獲取該頭的信息,解決瀏覽器的兼容性問題
* 文件下載
2. Referer
* 告訴服務器,我(當前請求)從哪裏來
* 做用:
1. 防盜鏈
2. 統計工做
3.請求空行
空行,就是用於分割POST請求的請求頭,請求體的
4.請求體(正文):
* 封裝POST請求消息的請求參數的
原理
訪問頁面 產生 請求/相應
一旦訪問路徑 ---> 建立servlet對象
建立requset、response對象,傳給servlet對象
servlet對象的service方法接受request、response對象
request裏面封裝的是請求路徑攜帶的數據(請求行 請求頭 請求體)
reponse 相應對象--->相應數據由程序員提供
Request:
1. request對象和response對象原理
* request對象和response對象是由服務器建立的。咱們來使用它們
* request對象是來獲取請求消息,response對象是來設置響應消息
2. Request功能:
1. 獲取請求消息數據
1. 獲取請求行數據
* GET /day14/demo1?name=zhangsan HTTP/1.1
* 方法:
1. 獲取請求方式:GET
* String getMethod()
(掌握)2. 獲取虛擬目錄:/day14
* String getContextPath()
3. 獲取servlet路徑:/demo1
* String getServletPath()
4. 獲取get方式請求參數:name=zhangsan
* String getQueryString()
(掌握)5. 獲取請求URI:/day14/demo1
* String getRequestURI():/day14/demo1
* StirngBuffer getRequestURL():http"//localhost/day14/demo1
6. 獲取協議及版本:HTTP/1.1
* String get Protocol()
7. 獲取客戶機的IP地址:
* String getRemoteAddr()
2. 獲取請求頭數據
* 方法:
(掌握)* String getHeader(String name):經過請求頭的名稱獲取請求頭的值
* Enumeration<String> getHeaderNames():獲取全部的請求頭名稱
3. 獲取請求體數據
2. 其餘功能:
一、獲取請求參數通用方式
* String getParameter(String name):根據參數名稱獲取參數值(Iput或者超連接傳來的值)
* String getParameterValues(String name):根據參數名稱獲取參數值的數組(僅在複選框使用)
* Enumeration<String> getParameterNames();獲取全部請求的參數名稱
* Map<String,String[]> getParameterMap():獲取全部參數的Map集合-->配合beanUtils的jar包
* 中文亂碼問題:
* GET方式:tomcat8已經將get方式亂碼問題解決了
* POST方式:會亂碼
* 解決:在獲取參數前,設置request的編碼:request.setCharacterEncoding("編碼")
二、請求轉發:一種在服務器內部進行資源跳轉的方式
1. 步驟:
1. 經過request對象獲取請求轉發器對象 getRequestDispatcher("資源路徑")
2. 使用這個對象進行轉發:forward(request,response)
2. 特色:
1. 瀏覽器地址欄路徑不發生變化
2. 只能轉發到當前服務器內部資源中
3. 轉發是一次請求
三、共享數據:
* 域對象:一個有做用範圍的對象,能夠在範圍內共享數據。
* request域:表明一次請求的範圍,通常用於請求轉發的多個資源中共享數據
* 方法:
1. setAttribute(String name,Object obj):存儲數據
2. Object getAttribute(String name):經過鍵獲取值
3. void removeAttribute(String name):經過鍵移除鍵值對
四、 獲取ServletContext域對象:
* ServletContext getServletContext()
4個功能:
api(2個)
二、四大域對象
HttpServletRequest
HttpSession
ServletContext
PageContext(jsp)html