Struts的核心控制組件是
ActionServlet
它是org
apache
struts
action
ActionServlet類型的Servlet
他繼承javax
Servlet
Http
HttpServlet
並實現了init()
doGet()/doPost()
destroy()等Servlet生命周期所用到的方法
還添加了一個process()
它本身不復雜
但它會調用其他的復雜方法
和spring框架有一樣
web容器在啟動的時候
先是初始化web
xml中配置的ActionServlet
ActionServlet再加載配置文件
(配置文件寫明了不同的請求的不同的ActionMapping)
其它接受客戶端請求的作出響應的過程如下
查找servlet並找到相應的action
Servlet容器在webxml文件中尋找url
pattern屬性為*
do的<servlet
mapping>元素
Servlet容器根據<servlet
mapping>元素的name屬性
在webxml文件中找到相應的servlet
查找相應的action
Servlet根據浏覽器是post還是get請求調用doPost()
doGet()方法
在其中調用ActionServlet的process()方法
Process()獲取RequestProcessor對象
調用RequestProcessor對象的process()方法
RequestProcessor對象的Process()方法
讀取struts
config
xml
在其中查找<action>子元素
查找的條件是
用戶請求的URI與action元素的path屬性值一樣
找到後確定name屬性
根據name找到<form
bean>元素
再根據action元素的name匹配值找到相應的ActionForm bean
Actionform重設
賦值
驗證
創建新的ActionFormc對象
保存ActionForm對象
保存為用戶請求(request)或會話(session)的屬性
Actionform的作用域由ActionMapping配置中的scope屬性值來決定
名稱為配置文件中的ActionMapping中的Attributte決定
調用ActinForm的reset()方法初始化ActionForm
調用reset方法的目的是為了對ActionForm中的值進行復位操作
通常情況要覆蓋reset()方法
把ActionForm的值恢復為默認值
調用ActionForm bean的setter方法為AtionForm賦值
驗證
如果validate屬性為true
ActionServlet會調用form對象的validate方法進行表達驗證
此方法返回ActionErros對象
裡面包含ActionMessage對象
封裝了錯誤消息
通過標記庫的errors標記可以將這裡返回的錯誤信息顯示在頁面上
Validate()沒有返回任何異常
那麼就會繼承進行下面的處理
用struts的Validator驗證組件比較好用
需求加兩個文件validation
xml
validator
rules
xml
這個組件的使用我會在下一次說明
action進行真正的業務處理
ActionServlet查找這個XXaction實例是否存在
不存在就創建一個實例
然後調用他的excute方法進行業務處理
返回forward
轉到客戶端
最後調用mapping
findForward(
abc
)方法
從ActionMapping元素中查找name為abc的forward元素
然後返回這個forward元素對應的頁面
其實就是查找ActionMapping本身的HashMap
到此對一個請求的處理完畢
裡面貫穿了struts的運行過程
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28213.html