風中葉之struts2學習筆記一

勸君更盡一杯酒發表於2013-10-18

Struts2

1,         struts官方網址:http://struts.apache.org/

2,         Struts

3,         Struts的概念和體系結構

4,         MVC模式的優點

5,         JSP  model1

6,         JSP model2

7,         Struts2必須使用的最小jar檔案

commons-fileupload-1.2.2.jar commons-io-2.0.1.jarcommons-lang3-3.1.jar ognl-3.0.5.jar struts2-core-2.3.4.jar xwork-core-2.3.4.jar freemarker-2.3.19.jar 

javassist-3.11.0.GA.jar ;(該jar包不在lib中,可以到例子中找到)

8,         struts是通過過濾器(Filter)與應用關聯的,在web.xml檔案中加入

9,         struts還必須配置自己的檔案,struts.xml,一定要在src目錄下建立,其中開始的dtd可以到例子中拷貝

10,    登入頁面和結果顯示頁面都是jsp頁面,比較簡單,就不在贅述

11,    關聯原始碼方法:專案名右鍵àBuild PathàConfigure Builder PathàLibrariesà點開struts2-core-2.3.4.jaràSource attachment (None)àEditàExternal Folderà”E:/WEB-jar/struts-2.3.4/src/core/src/main/java”

12,    根據開源專案原始碼生成javadoc幫助文件
1)新建一個普通的java專案,如
struts_doc
2
)將目錄\struts-2.3.4\src\core\src\main\java裡面內容拷貝到新建專案的src目錄下

3)匯入需要的jar檔案,選擇Add External Jars,除了struts2-core-2.3.4.jar都加入
4)在Tomcatservlet-api.jarjsp-api.jar同樣加入進來
5)選單欄ProjectàGenerate javadoc

13,整個執行流程:表單輸入完資料提交給login.action,流程轉到struts.xml檔案中,它裡面會有多個action,逐一去匹配;接著流程轉到匹配到的login對應的classLoginAction,例項化LoginAction物件,將頁面提交過來的資訊呼叫set方法逐個賦值給成員變數,接著自動呼叫execute方法,這個方法的返回值就是一個String,不能隨便寫,return的結果會跟action的子元素result進行匹配,流程轉到result元素對應的頁面result.jsp,該jsp頁面顯示使用者提交的資料。

13,    struts2不是單例項的,每一次請求都會生成一個Action物件。而struts1Servlet都是單例項的。

14,    Struts2的型別轉換,對於8種基本型別以及StringDate等常見型別,Struts2可以使用內建的型別轉換器實現自動轉換;但對於自定義的物件型別來說,需要我們自己制定轉換方式。

15,    1)表單頁面

2JavaBean

3struts.xml中進行配置,並且建立對應的ActionUserActionUserAction類繼承自ActionSupport類,對於實際開發來說,都要繼承ActionSupport類,它提供了諸如國際化,型別轉換,伺服器端驗證等等。

 

 

4)編寫型別轉換器converter,所有的型別轉換器都應該繼承自DefaultTypeConverter(ognl)

5)屬性與型別轉換器關聯檔案 Action-conversion.properties,如UserAction-conversion.properties

6user01_output.jsp頁面

16,    對於自定義的型別轉換器來說,需要提供3方面的資訊:Action名字、Action中待轉換的屬性名以及該屬性對應的型別轉換器

17,           對於自定義的轉換器,我們可以繼承StrutsTypeConverter,它有兩個抽象的方法convertFromString(Map context,String[] values,Class toClass) ,convertToString(Map context,Object o),實際上就是將DefaultTypeConverter類中的convertValue()方法進行了拆分。
18,           批量轉換,跟普通的轉換沒有區別,只是原來使用的屬性是User型別,現在使用List<User>;
19,           全域性型別轉換用的比較少,區域性型別轉換的“***-conversion.properties”與Action在同一包下面,而全域性型別轉換檔案是在src下,檔名固定“xwork-conversion.properties”
實際開發中,更多的還是使用區域性轉換器。
20,           Action類中的execute()方法,類似於Servlet中的doGet(),doPost()方法,預設執行的是execute()方法,我們也可以指定我們自己的方法進行處理。即在struts.xml中action元素中定義屬性method,屬性值即為待執行的方法,其中該方法要與execute保持一致,但是不推薦使用,因為容易造成Action混亂。 

21,輸入驗證舉例

1)         註冊頁面

2)         struts.xml中註冊

3)         RegisterAction的處理

22,兩種級別錯誤資訊的使用方式及標籤庫的顯示方式

23,struts2標籤的使用
24,輸入校驗總結:
1)                首先進行型別轉換
2)                然後進行輸入校驗(validate方法)
3)                如果在上述步驟中出現了任何錯誤,都不會執行execute方法,會轉向struts.xml中該action的名為input的result所對應的頁面。
4)                當上述過程沒有任何錯誤時,才會執行execute方法。
注意:如果在型別轉換過程中出現了錯誤,struts2會將該錯誤放到filed錯誤級別。
25,ActionSupport類的addActionError()方法的實現:首先建立一個ArrayList物件,然後將錯誤訊息新增到該ArrayList中。

26,當呼叫getActionErrors()方法返回Action級別的錯誤資訊列表,返回的實際上是集合一個副本而不是集合本身,因此對集合副本呼叫clear()方法清除的依舊是副本中的元素而非原集合的元素。我們可以呼叫

this.clearErrors();//兩種級別的錯誤都會被清除

   或者分別呼叫兩種級別的錯誤訊息

this.clearActionErrors();

  this.clearFieldErrors();
27,FieldError級別的錯誤資訊底層是用LinkedHashMap實現的,該Map的key是String型別的,value是List<String>型別的,這就表示一個Field Name可以對應多條錯誤資訊,這些錯誤資訊都放置在List<String>集合當中。

相關文章