1. 程式人生 > >Spring IoC容器管理Action

Spring IoC容器管理Action

framework 實現類 ces 攔截 ons servlet 需要 所有 使用

Spring IoC容器管理Action有兩種方式:DelegatingRequestProcessor、DelegatingActionProxy

不管采用哪一種方式,都需要隨應用啟動時創建ApplicationContext實例,由Struts負責在應用啟動時創建ApplicationContext實例。Struts中提供了PlugIn的擴展點,可在應用啟動和關閉時,創建或銷毀某些資源。

使用ContextLoaderPluIn創建了ApplicationContext實例後,關鍵是如何將AtionServlet攔截的請求,轉發給Spring管理的bean。

ActionServlet將請求轉發到Spring容器,有以下兩個時機:在ActionServlet之處將處理轉發給Spring容器中的bean、在Action之處將處理轉發給Spring容器中的bean。

根據這兩個時機,完成這個轉發也有以下兩種策略:采用DelegatingRequestProcessor,在ActionServlet出完成轉發、采用DelegatingActionProxy,在Action出完成轉發。

查看 Struts 的源代碼,我們可以看到由 ActionServlet 調用 RequestProcessor 完成實 際的轉發。如想在 ActionServlet 處將請求轉發給 ApplicationContext 的 bean ,可以通過 擴展 RequestProcessor 完成,使用擴展的 RequestProcessor 替換 Struts 的 RequestProcessor ,例如:

//使用 spring 的 RequestProcessor 替換 struts 原有的 RequestProcessor

<controller processorClass="org.springframework.web.struts.Delegating RequestProcessor"/>

DelegatingRequestProcessor 可直接替換了原有的 RequestProcessor,並在請求轉發給 action 之前,轉發給 Spring 管理的 bean; 而 DelegatingActionProxy 則被配置成 Struts 的 action,即所有的請求先被 ActionServlet 攔截,然後將請求轉發到對應的 action,而 action 的實現類全都是 DelegatingActionProxy; 最後由 DelegatingActionProxy 將請求轉發給 Spring 容器的 bean。

Spring IoC容器管理Action