Servlet(2)

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(返回數據)。

怎樣使用

  1. GET與POST都有自己的語義,不能隨便混用。
  2. 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。
  3. 並不是所有瀏覽器都會在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接口的方法,會出現空指針。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章