Struts2之結果類型的使用和分析

一、學習案例:通過修改struts.xmlresult的類型理解struts2結果類型的意義。

 

二、案例分析:我們通過修改type類型來分析struts2結果類型的使用和意義。

a)type=”dispatcher”

Result默認請求類型就是dispatcher,一般不需要寫,也是用的最多的。

b)type=”redirect”

struts.xml文件中通過在login1中配置:

<result type="redirect">/success.jsp</result>

通過在loginUI.jsp中輸入登錄信息,當跳轉到success.jsp中後,頁面沒有獲取到值。由此可以發現,redirect是做的重定向。

c)type=”redirectAction”

struts.xml文件中通過在login1中配置:

<result type="redirectAction">login2</result>

通過在loginUI.jsp中輸入登錄信息,頁面會跳轉到loginUI2.jsp,同時瀏覽器的地址欄中地址爲:.../login2.action。由此可以發現,redirectAction表示客戶端向服務器請求了兩次。

此種方式可以解決客戶端重複刷新導致數據重複插入的問題,所以redirectAction很重要,也很常用。

當然很常用的前提是攜帶參數,不然就沒什麼意義了。

關於傳遞參數,我們可以在result路徑中通過${}獲取當前action中存在的成員變量。也可以是處理過後的成員變量。

比如項目中,在loginAction中的execute()方法中處理,然後經由${}獲取傳遞。在loginUI2.jsp中獲取顯示。

 

注意:重定向也就是再次請求,所以在Login2Action中我們要接收參數,然後頁面才能顯示。

d)type=”chain”

執行步驟和c中一樣,但是我們要注意瀏覽器地址的地址,並沒有usernameAndPassword參數。由此可以發現,chain表示的是,服務器內的請求轉發。

 

注意:

1、有一點是很容易區別的,那就是redirectAction重定向必須手動傳遞參數,而chain則不需要。

2、在之前的版本中,chain轉發實際在服務器內傳遞的參數是我們請求時傳遞的參數,而在action中處理的參數在服務器內轉發是不傳遞的。可能這是struts2改進的吧。關於這一點,我不太確定,不過實驗證明就如我說的。所以我們還是以實驗爲真。關於這一點是否是struts2的改進,等我查看資料後再證實。

3、關於在服務器內做請求轉發,我們一般不常用,所以關於chain,大家瞭解下就行。

 

e)我們可以從struts2-core-2.3.15.3.jar打開得到struts-default.xml文件中查看type都有哪幾種類型。我們一般最常用的就是dispatcherredirectAction。在我的網站“愛尚合夥人”中基本都是這兩種,關於文件上傳會用到stream,在講到文件上傳時再做介紹。

 

 

三、經驗之談:

a)大家始終要記着struts2的本質還是servlet,只不過struts2對此進行了高級的封裝。也不是說struts2不重要,千萬別誤解,畢竟前輩們總結出來的東西都是有其精華的。大家在學習框架時,也要經常複習以前的東西,本質就是我們學習的理論所在。

b)對於框架的學習,我希望大家當成學習java基礎一樣,也要養成查文檔的習慣,不要跟我之前一樣,只是學些皮毛,要學會看源碼,研究原理的東西。這樣對我們學習東西來講,不但速度快,同時,也會加深我們隊知識的理解和記憶。

c)對於一些知識點我們要善於用實驗驗證。因爲有時候我們在網上得到的知識隨着工具的改進和提高,相對的知識點也有着完善和轉變。對於這一點,大家無需擔心,即使再怎麼完善,一些常用的功能和代碼,也是不會有太大變動的。我們始終要知道版本的提高是對現有知識的一種高度的總結,是向着好用便捷地方向發展的。而不是向着配置越來越複雜,使用越來越困難轉變的。

 

四、參考項目:http://download.csdn.net/detail/u011638419/8191213

 

五、每日一樂:

我的女友是個喫貨。

有一次她喫得很飽肚子很圓,摸着肚子說:與其讓男人把肚子搞大,還不如自己把肚子搞大。

 

 

最終解釋權歸愛尚合夥人所有,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章