天天看點

httprequest 詳解request的運作流程

  1. HttpServletRequest概述

      我們在建立Servlet時會覆寫service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。service()方法中寫了根據請求方式的不同調用doget()和dopost().

 service方法中的request的類型是ServletRequest,而doGet/doPost方法的request類型HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大.

request的運作流程

httprequest 詳解request的運作流程

2、抓取http包,分别抓請求行,請求頭,請求體 (post請求方式才會有)

httprequest 詳解request的運作流程

---------------通過request獲得請求行

獲得用戶端的請求方式:String getMethod()

String getContextPath() ---web應用的名稱

request.getRemoteAddr() --- 獲得通路的用戶端IP位址

--------------------通過request獲得請求頭

String getHeader(String name)

-----------------------通過request獲得請求體

String getParameter(String name) 

String[] getParameterValues(String name)

Map<String,String[]> getParameterMap()

解決post送出方式的亂碼:request.setCharacterEncoding("UTF-8");

解決get送出的方式的亂碼:

            parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

3、request是一個域對象

request對象也是一個存儲資料的區域對象,是以也具有如下方法:

setAttribute(String name, Object o)

getAttribute(String name)

removeAttribute(String name)

request完成請求轉發

1、獲得請求轉發器----path是轉發的位址

RequestDispatcher getRequestDispatcher(String path)

2、通過轉發器對象轉發

requestDispathcer.forward(ServletRequest request, ServletResponse response)

面試題一    ServletContext域與Request域的生命周期比較?

ServletContext:

建立:伺服器啟動

銷毀:伺服器關閉

域的作用範圍:整個web應用

request:

建立:通路時建立request

銷毀:響應結束request銷毀

域的作用範圍:一次請求中

面試題二     轉發與重定向的差別?

1)重定向兩次請求,轉發一次請求

2)重定向位址欄的位址變化,轉發位址不變

3)重新定向可以通路外部網站 轉發隻能通路内部資源

4)轉發的性能要優于重定向

httprequest 詳解request的運作流程

面試題三   用戶端位址與伺服器端位址的寫法?

用戶端位址:

是用戶端去通路伺服器的位址,伺服器外部的位址,特點:寫上web應用名 稱

eg:  直接輸入位址,重定向

伺服器端位址:

伺服器内部資源的跳轉的位址,特點:不需要寫web應用的名稱

eg: 轉發

繼續閱讀