- forward是服務器內部轉發
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?值/對的方式