昨天學習了struts的ActionForm 才知道,原來在struts中ActionForm扮演N多重要角色。
今天學習到ActionForward。
下面開始簡述一下自己學到的心得體會。
在剛開始我理解的請求的轉發和重定向只是有一個區別,
那就是如果用請求的轉發那么在上下文環境中儲存的參數些在轉發的下一個Action或JSP中還能用。
而相反請求的重定向則會把上下文清空。所以那些參數也不復存在。
其實在一開始這么理解確實沒有錯的。
這幾天猛然翻起struts的書才發現。自己懂的還很少。
請求的轉發:
請求的轉發實際是在服務器那端執行的。也就是說那些request、session這里里面存放的東西只能在服務器端訪問。
現在從客戶端發送一個請求過來,如果在Action中進行了請求的重定向,那么struts就會把請求對象傳給下一個Servelt
處理。所以大家在上下文件環境中保存的參數都還有。在我們做的程序開發中差不多全是請求的轉發,因為要利用
上下文環境來傳遞數據。因為在請求的轉的同時,這一次請求并沒有返回客戶端,只是在服務器端做了轉發。所以
當響應回到客戶端的時候,客戶端并不知道服務器端進行過請求的轉發所以在客戶端的地址欄的url不做任何變化。
請求的重定向:
請求的重定向實際是當在服務器端接受到請求的重定向請求的時候,他會即時響應客戶端然后告訴客戶端要請求的地址。并
自動再將請求發送給傳回來的url。實際上請求的重定向兩次向服務器發送了請求。所以當服務器第一次響應請求的時候,
不能把request對象傳送回客戶端,所以在請求的重定向中無法通過上下文環境來保存數據。那我們怎么傳遞數據呢,只能通過
服務器第一次響應的時候會傳送回來一個再次請求的url(
http://www.baidu.com?keyword=123)。可以在url中跟上對應的參數可以達到數據傳遞的目的。這樣用著比較麻煩,但這樣做就可以改變客戶端的url地址。因為請求第一次是返回過客戶端的。所以客戶端就知道了新的url地址,相應
也就會改變。
小結:
個人認為請求的重定向的轉發最大的差別就是:請求的轉發是在服務端完成的,并沒有返回客戶端。而請求的重定向會返回一次客戶端,通過
客戶端的身份再次請求相應的url。