struts2 處理流程
1) 當servlet容器接收到一個請求后,將請求交給你在web.xml里配置的過濾器FilterDispatcher,調用它的doFilter()方法。
2) FilterDispatcher詢問ActionMapper,以便確定這個請求有對應的action調用。
3) ActionMapper返回一個描述action調用的ActionMapping對象。
4) FilterDispatcher調用Dispatcher類的serviceAction()方法。
5) Dispatcher調用ActionProxy的execute ()方法。
6) ActionProxy設置ActionInvocation對象的執行上下文,然后調用其invoke()方法。
7) ActionInvocation的invoke()方法從攔截器映射中查找尚未執行的攔截器,調用它的intercept (invocation)方法,并將自身對象的引用作為參數傳遞給攔截器。
8) 攔截器完成某些預處理工作后,反過來調用ActionInvocation的invoke()方法。ActionInvocation維護著自己的狀態,所以它知道哪些攔截器已經被執行,如果還有沒執行的攔截器就繼續執行它的intercept (invocation)方法
9) 如果所有的攔截器都已經執行過了,就調用Action實例的excute()方法(如果在struts.xml文件中沒有被設置成其他方法的話)。
10) ActionInvocation根據Action執行返回的結果碼,查出對應的result,調用result的execute(invocation)方法,將結果頁面呈現給用戶。
11) ActionInvocation的invoke()方法將控制權返回給攔截器映射中的最后一個攔截器,該攔截器完成所有必需的后期處理工作,然后從 intercept (invocation)方法返回,允許前一個攔截器執行它自己的后處理工作,如此反復直到所有的攔截器都成功的返回。
12) ActionInvocation的invoke()方法執行完畢后,向ActionProxy返回一個String類型的結果碼,最后ActionProxy清理狀態并返回。
