struts2 處理流程

openkk 12年前發布 | 3K 次閱讀 5.2.1版本發布

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清理狀態并返回。

 

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!