2012-02-03 108 views
0

在Struts2中,如果我們已經定義了一個攔截器堆棧並且它是以先入先出方式調用的。 所以在後期處理階段,如果一個較早的攔截器返回一個控制字符串,結果將響應呈現給客戶端,會發生什麼情況。 我想知道左側攔截器是否會被處理。Struts攔截器工作流程

回答

1

那麼它會這樣工作。

只有在攔截器堆棧已被完全調用後,纔會調用您的動作方法。這意味着一旦第一個攔截器在堆棧中成功調用,它將調用堆棧中定義的下一個攔截器,並且引用存儲在堆棧這條產業鏈將繼續調用,直到在堆棧中的最後一個攔截器被稱爲

invocation.invoke() 

這個電話是調用堆棧中的還是本定義下一個攔截器的關鍵是最後它會調用所需功能的行動課。

現在在其他情況下,假設一些攔截器失敗,說workflow它將返回結果爲INPUT,並將停止攔截器的進一步執行,框架將向用戶輸出所需的JSP/Tempelate。

在這種情況下,比後處理/清理攔截器將被稱爲相反的順序,即最上面或最近執行的攔截器將被稱爲第一次,如此等等。

這種後處理的想法是做任何清理工作或需要做任何其他事情(如清理資源等)

希望這會給你一些想法。

+0

感謝Umesh .......... 這意味着頁面將呈現給客戶端,進程將在後臺執行....... – 2012-02-03 11:43:47

+0

yes..when'invoke()'返回的結果已經被髮送回客戶端。因此總之我們可以說這個後處理可以用來執行某些/條件邏輯。 – 2012-02-03 12:57:25

+1

@NIVESHSENGAR我只會添加實現'PreResultListener'允許攔截器在渲染結果之前返回控制權,否則這是一個合理的描述。 – 2012-02-03 15:49:01