HTTP簡介
- WEB瀏覽器與WEB服務器之間一問一答的交互過程必須遵循一定的規則,這個規則就是HTTP協議。
- HTTP是超文本協議。它是TCP/IP協議中的一個應用層協議。用於定義WEB瀏覽器與WEB服務器之間交換數據的過程以及數據本身的格式。
- HTTP協議的版本HTTP/1.0、HTTP/2.0、HTTP.NG。
HTTP的會話方式
瀏覽器與WEB服務器的鏈接過程是短暫的,每次連接只處理一個請求和響應。對每一個頁面的訪問。瀏覽器與WEB服務器都要建立一次單獨的連接。
瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。
HTTP請求消息
請求消息的結構:
一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。
HTTP響應消息
響應消息的結構:
一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。
使用get和post方式傳遞參數
- get方式:www.servlet.com?name=qiu&xing=meng
傳遞的參數是有限制的,一般限制在1KB以下。 - post方式:www.servlet.com
傳遞參數比較安全
倆者的區別:
GET和POST還有一個重大區別,簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包。
長的說:
對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
怎樣使用
- GET與POST都有自己的語義,不能隨便混用。
- 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。
- 並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次
HttpServletRequest
爲ServletRequest的一個子接口,封裝了很多關於HTPP請求的一些方法,是對ServletRequest的擴展。
HttpServletRequest httpServletRequest =(HttpServletRequest )ServletRequest
- 獲取請求的URL
httpServletRequest.getRequest()
- 獲取請求方式
httpServletRequest.getMethod()
- 獲取請求參數字符串,get爲?後面參數、post爲null
httpServletRequest.getQueryString()
- 獲取請求Servlet的映射路徑
httpServletRequest.getServletPath();
- setAttribute(這個後面會着重講)
HttpServletResponse
封裝了HTTP響應信息,具體可以用該藉口的方式去實現。
- getWriter()
返回PrintWriter對象,調用print方法,將print中的參數打印在瀏覽器中。 - setContentType()
設置返回響應的類型 - sendRedirect()
請求重定向,
GenericServlet
爲servlet藉口的實現類(抽象的),現在直接繼承HttpServlet即可.
因爲servlet爲接口,實現類要實現全部方法,比較繁瑣,HttpServlet封裝了所有HTTP的方法,且繼承GenericServlet。
- GenericServlet聲明ServletConfig類型的成員變量,但是在init()方法中實現的。
- 利用ServletConfig成員變量實現了ServletConfig接口的方法。
- 不建議直接覆蓋init()方法,如果忘記super,會直接調用ServletConfig接口的方法,會出現空指針。