關於controller中的Action:(ActionServlet也是多線程的)
因為Action類是線程安全的,所以在應用程序中創建Action類的唯一實例;Struts中使用lazy Singleton,也就是先判斷是否存在實例,若不存在,則創建實例,且對創建實例的代碼進行了Synchronization,從而保證同一時刻只有一個線程可以創建Struts的實例。
除此之外,確保Action類不使用實例變量來存儲客戶特有的狀態,對於客戶的特有狀態,應該在execute中
使用局部變量來保存。
Struts中大量使用了Resource Wrapper
原理可以這樣形容:所有在資源實際在配置文件中指定,然後再內存中由一個類的實例來代表,這樣要修改資源配置的話,只需要修改相應的.xml文件就可以了
For Example:
config.ControllerConfig類 ----〉controller元素中配置的信息
ActionMapping-----> action元素,其中findForward()--->findForwardConfig()是否在動作級設定
forward,然後檢查global-forward元素
ActionForward----->forward元素的;web資源的抽象,比如jsp頁面和java servlet
Action類應把業務邏輯委托給模型組件
actions包中有五個action類:
ForwardAction:執行一個到parameter中配置的uri的forward。
IncludeAction:可以用來實現RequestDispatcher中的include();但我不是很清楚
DispatchAction:需要給出它的子類,為需要在服務上執行的每個功能添加一個方法(必須DispatchAction調用的Action類包含一個方法)在配置時必須定義parameter屬性,它使用parameter的值決定調用什麼方法
想法是把聯合完成一個大功能的多個action類放在同一個類中
注意點:DispatchAction使用java Reflection 來調用正確的方法,但是這些方法必須為public
LookupDispatchAction:是DiapatchAction的子類,但是使用請求參數值,利用參數值反向查詢資源邦定,並將其與類中的方法進行匹配
SwitchAction:支持從一個應用程序模塊切換到另一個
兩個參數:page(目的地)和prefix(源)
Struts中的實用類:
util中
RequestUtils:線程安全的,沒有實例變量,且其中所有方法均為static的。協助處理一個請求
ResponseUtils:協助建立一個響應
beanutils中:
BeanUtils:populate():使用key/value映射,把data裝入JavaBean中;
:getProperty():返回property的string表示
:getArrayProperty():string數組
PropertyUtils:getProperty():返回屬性的值,不改變屬性的類型。
commons:
FastHashMap:多線程的,是HashMap的子類,有slow和fast兩種模式 .