Java HttpRequest 詳解

文章轉自https://yq.aliyun.com/articles/650312?accounttraceid=94d95fb493324bb2b44bbb9b538f15b0ycge
HttpServlet 類需要兩個參數HttpRequest和HttpResponse。比如doGet方法

protected void doGet(

HttpServletRequest request,
HttpServletResponse response)
  throws ServletException, IOException {

}
那我在這先介紹HttpRequest。

HttpRequest對象的目的是代替瀏覽器把Http請求發送給web應用,因此,任何瀏覽器能發送的,HttpRequest都可以接受到。

HttpRequest對象有很多方法,這裏只介紹重要的,剩餘的有興趣的話你可以自己看JavaDoc。

參數
請求參數是從瀏覽器連同請求一起發送的參數。 請求參數通常作爲URL的一部分(在“查詢字符串”中)或作爲HTTP請求主體的一部分發送。 例如:

www.baidu.com?param1=hello&param2=world
在這個URL中,有兩個參數

param1=hello
param2=world
你可以用HttpRequest訪問這些參數,例如:

protected void doGet(HttpServletRequest request,HttpServletResponse response)

  throws ServletException, IOException {

String param1 = request.getParameter("param1");
    String param2 = request.getParameter("param2");

}
通常,如果瀏覽器發送HTTP GET請求,則參數將包含在URL中的查詢字符串中。 如果瀏覽器發送HTTP POST請求,則參數將包含在HTTP請求的正文部分(form)中。

請求頭
請求頭是瀏覽器伴隨HttpRequest發送的的一個'鍵值對',請求標題包含關於例如 使用什麼瀏覽器軟件,瀏覽器能夠接收哪些文件類型等等。
我們可以使用HttpRequest對象來接受請求頭:

String contentLength = request.getHeader("Content-Length");
Content-Length頭包含在HTTP請求正文中發送的字節數,以防瀏覽器發送HTTP POST請求。 如果瀏覽器發送HTTP GET請求,則不使用Content-Length標頭,並且上述代碼將返回null。

輸入流
如果瀏覽器發送HTTP POST請求,請求參數和其他潛在數據將發送到HTTP請求正文中的服務器。 它不一定是在HTTP請求主體中發送的請求參數。 它可能幾乎是任何數據,如文件或SOAP請求(Web服務請求)。

爲了可以訪問HTTP POST請求的主題內容,我們可以用inputStream。這是一個例子:

InputStream requestBodyInput = request.getInputStream();
注意:在調用任何getParameter()方法之前,您必須調用此方法,因爲在HTTP POST請求上調用getParameter()方法將導致servlet引擎 解析 HTTP請求主體 以 獲取參數。 一旦分析完畢,就無法再以原始字節流的形式訪問主體。

Session
也可以從HttpRequest對象獲取Session對象。

Session對象可以在請求之間保存關於給定用戶的信息。 因此,如果您在一個請求期間將對象設置爲會話對象,則它可供您在同一會話時間範圍內的任何後續請求和期間讀取。

這裏是如何獲取Session對象:

HttpSession session = request.getSession();
ServletContext
也可以從HttpRequest對象中獲取ServletContext對象。ServletContext包含一些web應用信息。例如,能獲取到web.xml文件裏的一些參數,也能將request請求轉發給別的Servlet,也能在ServletContext裏存儲一些應用參數。
這是獲取ServletContext的例子:

ServletContext context = request.getSession().getServletContext();
可以看到,我們要先獲取Session對象,再獲取ServletContext。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章