客戶端和服務器端跳轉

   
  • forward是服務器內部轉發
標準流程如下:
 
  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?值/對的方式

網址參考:http://blog.csdn.net/u012124564/article/details/47355409
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章