客戶端和伺服器端跳轉
阿新 • • 發佈:2019-02-16
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過去
此時,伺服器會向客戶端傳送302狀態碼和新的url,告訴客戶端重新發送request請求到新的url
2.當客戶端根據302狀態碼傳送新的請求到到新的url的時候,新的請求-響應流程重新開始
4.這時候伺服器重新建立HttpServletRequest物件和HttpServletResponse物件
5.此時兩個請求已經不在一個執行緒了,更不用說request和response物件了
所以此時在如果想把資料傳遞到新的servlet或新的jsp的request內,那麼只能使用url?值/對的方式
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是客戶端轉發
此時,伺服器會向客戶端傳送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?值/對的方式