Struts2執行流程及配置檔案載入順序
阿新 • • 發佈:2018-12-24
1 Struts2執行流程
當用戶訪問某一個Action的時候,先經過核心過濾器(web.xml中配置),在核心過濾器中執行一組攔截器(這組攔截器實現部分功能,在Struts2的核心包中的Struts-default.xml檔案中),執行目標Action,根據Action的返回值,進行頁面跳轉。
2 Struts2配置檔案載入順序
伺服器一啟動,核心過濾器就載入
1>開啟StrutsPrepareAndExecuteFilter的原始碼,檢視其初始化方法;其中有一行程式碼:dispatcher = init.initDispatcher(config);
public void init(FilterConfig filterConfig) throws ServletException { InitOperations init = new InitOperations(); Dispatcher dispatcher = null; try { FilterHostConfig config = new FilterHostConfig(filterConfig); init.initLogging(config); dispatcher = init.initDispatcher(config); init.initStaticContentLoader(config, dispatcher); prepare = new PrepareOperations(dispatcher); execute = new ExecuteOperations(dispatcher); this.excludedPatterns = init.buildExcludedPatternsList(dispatcher); postInit(dispatcher, filterConfig); } finally { if (dispatcher != null) { dispatcher.cleanUpAfterInit(); } init.cleanup(); } }
2> 檢視init.initDispatcher(config)方法,程式碼如下;
public Dispatcher initDispatcher( HostConfig filterConfig ) {
Dispatcher dispatcher = createDispatcher(filterConfig);
dispatcher.init();
return dispatcher;
}
3>在檢視它的初始化方法:
public void init() { if (configurationManager == null) { configurationManager = createConfigurationManager(DefaultBeanSelectionProvider.DEFAULT_BEAN_NAME); } try { init_FileManager(); init_DefaultProperties(); // [1] init_TraditionalXmlConfigurations(); // [2] init_LegacyStrutsProperties(); // [3] init_CustomConfigurationProviders(); // [5] init_FilterInitParameters() ; // [6] init_AliasStandardObjects() ; // [7] Container container = init_PreloadConfiguration(); container.inject(this); init_CheckWebLogicWorkaround(container); if (!dispatcherListeners.isEmpty()) { for (DispatcherListener l : dispatcherListeners) { l.dispatcherInitialized(this); } } errorHandler.init(servletContext); } catch (Exception ex) { if (LOG.isErrorEnabled()) LOG.error("Dispatcher initialization failed", ex); throw new StrutsException(ex); } }
- init_DefaultProperties() ----載入default.properties(在Struts2中不需要管post請求的中文亂碼)
- init_TraditionalXmlConfigurations(); ----載入struts-default.xml、struts-plugin.xml(一些外掛的配置檔案)、struts.xml
- init_LegacyStrutsProperties(); ----載入struts.properties(使用者可以自己定義的檔案)
- init_CustomConfigurationProviders(); ----載入配置提供類
- init_FilterInitParameters() ; // [6] ----載入web.xml中過濾器初始化引數
- init_AliasStandardObjects() ; // [7] ----載入Bean物件
因此其載入順序為:
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml
- struts.properties
- web.xml
注意:後配置的常量的值會覆蓋先配置的常量的值