1.啓動tomcat過程中,加載web.xml文件。
2.找到web.xml中的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter類。
3.在StrutsPrepareAndExecuteFilter中調用了init方法,創建一個了InitOperations()對象,並且調用了initDispatcher(config);方法。在class文件中的源碼如下:
public void init(FilterConfig filterConfig) throws ServletException {
InitOperations init = new InitOperations();
try {
FilterHostConfig config = new FilterHostConfig(filterConfig);
init.initLogging(config);
Dispatcher dispatcher = init.initDispatcher(config);
4.在InitOperations類中調用了initDispatcher(config)方法,在該方法中又調用了Dispatcher的init方法,class文件中的源碼如下:
public Dispatcher initDispatcher( HostConfig filterConfig ) {
Dispatcher dispatcher = createDispatcher(filterConfig);
dispatcher.init();
return dispatcher;
5.接下來我們跳到Dispatcher類中調用init()方法處,源碼如下:
public void init() {
if (configurationManager == null) {
configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
}
try {
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
上面的源碼調用了init_TraditionalXmlConfigurations()方法,接着進到該方法中:
private void init_TraditionalXmlConfigurations() {
String configPaths = initParams.get("config");
if (configPaths == null) {
configPaths = DEFAULT_CONFIGURATION_PATHS;
}
在該方法中可以看到定義了一個配置文件路徑,DEFAULT_CONFIGURATION_PATHS,然後繼續跟蹤源碼。
在該類中源碼如下:
private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";
說明此時加載了struts-default.xml,struts-plugin.xml,struts.xml三個文件。
注意:
1.struts.xml文件必須放在classpath的根目錄下。
2.名字必須爲struts.xml
3.因爲整個加載過程寫在了過濾器的init方法中,所以tomcat啓動的時候就把該文件加載了。