Struts2 工作原理

容器启动后,FilterDispatcher类被实例化,并调用它的init(FilterConfig filterConfig)方法。其中FilterConfig接口用于储存初始化信息。

在init方法中会初始化log信息,然后生成Dispatcher类的实例。

其中createDisplatcher方法的定义如下:将filterConfig中的信息封装到一个Map中,作为Dispatcher类构造函数的参数。

然后dispatcher初始化,主要是读取一些配置文件,

init_DefaultProperties方法初始化properties配置:

接下来看DefaultPropertiesProvider类的register方法:

PropertiesSettings类的构造函数:读取default.properties的内容。


再来看init_TraditionalXmlConfigurations的方法实现。

首先读取web.xml中的config初始参数值,如果没有配置,默认读取“struts-default.xml,struts-plugin.xml,struts.xml”,

(private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";)

所以默认的配置文件必须取名为这三个值,否则不被识别。当然可以添加自己的配置文件,并在web.xml中添加即可。

读取默认的配置文件是,如果不包含xwork.xml,就把StrutsXmlConfigurationrovider类加入ConfigurationProvider队列。

StrutsXmlConfigurationrovider类的构造函数实现:

此类继承XmlConfigurationProvider,而XmlConfigurationProvider又实现ConfigurationProvider接口。

类XmlConfigurationProvider负责配置文件的读取和解析。addAction()方法负责读取<action>标签,并将数据保存在ActionConfig中;addResultTypes()方法负责将<result-type>标签转化为ResultTypeConfig对象;loadInterceptors()方法负责将<interceptor>标签转化为InterceptorConfi对象;loadInterceptorStack()方法负责将<interceptor-ref>标签转化为InterceptorStackConfig对象;loadInterceptorStacks()方法负责将<interceptor-stack>标签转化成InterceptorStackConfig对象。而上面的方法最终会被addPackage()方法调用,将所读取到的数据汇集到PackageConfig对象中,那么让我们看一下addPackage()方法的内容:

而实际的读取xml的方法是loadConfigurationFiles()方法:

接下来看init_LegacyStrutsProperties方法的实现。

LegacyPropertiesConfigurationProvider类的register方法:

接下来看init_CustomConfigurationProviders方法:读取web.xml中configProviders初始参数的配置信息。(通常是自定义的Provider)

剩下的方法与上面这几个类似,就不多赘述了。好了,到此,struts2.0的启动部分就完成了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值