1. 程式人生 > >客戶端和伺服器端跳轉

客戶端和伺服器端跳轉

  1.客戶端瀏覽器傳送HTTP request到伺服器
   2.伺服器在接收到客戶端request之後,分別創建出HttpServletRequest物件和HttpServletResponse物件,然後呼叫所請求的servlet的service方法,同時將HttpServletRequest物件和HttpServletResponse物件傳遞過去.
   3.當servlet,呼叫forward方法時,伺服器根據forward轉發的url找到對應的servlet,(如果forwardjsp,則呼叫的是web container為jsp生成的java bean)
   伺服器轉發全程是沒有客戶端參與的,都在webcontainer容器內部進行,沒有任何伺服器和客戶端的通訊,實際就是伺服器內部的跳轉

   4.注意這裡,與1.的呼叫servlet不同:
    這次forward,伺服器沒有構建HttpServletRequest物件和HttpServletResponse物件
    而是將原來的HttpServletRequest物件和HttpServletResponse物件傳遞給jsp過去


  •  sendRedirect是客戶端轉發
 1.當sendRedirect方法被執行,同時也意味著一次httprequest請求的結束
   此時,伺服器會客戶端傳送302狀態碼新的url,告訴客戶端重新發送request請求到新的url
HTTP/1.1 302Found
Location: http://localhost:9080/AppIndex.jsp
Content-Language: zh-CN
Content-Length: 0
Set-Cookie: JSESSIONID=00003FhtMbQNx1naY0MZ05XJeMz:-1; Path=/
Date: Wed, 29 Aug 2007 16:37:31 GMT
Server: WebSphere Application Server/6.1
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Cache-Control: no-cache="set-cookie, set-cookie2"

 2.當客戶端根據302狀態碼傳送新的請求到到新的url的時候,新的請求-響應流程重新開始
 4.這時候伺服器重新建立HttpServletRequest物件和HttpServletResponse物件
 5.此時兩個請求已經不在一個執行緒了,更不用說request和response物件了
所以此時在如果想把資料傳遞到新的servlet或新的jsp的request內,那麼只能使用url?值/對的方式