读书人

struts2源码初读(1)初始化

发布时间: 2012-07-22 19:31:17 作者: rapoo

struts2源码初读(一)初始化
很久之前就有读一下struts2源码的想法了,可是一直没什么时间也静不下心来,最近淡定下来了晚上也没什么事,综合项目看看了struts2源码,目前还是个菜,写的不对的地方请大家谅解
看了downpour的文章让我受益匪浅,文章中会引用到downpour的文章和图片,顺便给downpour推荐下新书《Struts2技术内幕》,看了样章个人感觉很不错,值得一看
-----------------------------------------------
downpour的《Struts2技术内幕》 新书样章和导读
-----------------------------------------------
看源代码之前了解下struts2逻辑结构,此处引用自downpour文章



Struts2请求流程
1、客户端发送请求
2、StrutsPrepareAndExecute通过ActionMapper来决定这个Request需要调用哪个Action
3、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行
4、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类
5、ActionProxy创建一个ActionInvocation的实例
6、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
7、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener


准备知识做完了,现在开始看struts2源码。说到浏览struts2源码当然要从struts2的入口类StrutsPrepareAndExecute开始
在web.xml中配置filter,filter-class是StrutsPrepareAndExecute类或其子类

private void init_AliasStandardObjects() {        configurationManager.addConfigurationProvider(new BeanSelectionProvider());    }/** * 主要加载org/apache/struts2/struts-messages */... ...LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");... ...


再回到StrutsPrepareAndExecuteFilter的init方法,init.initStaticContentLoader(config, dispatcher)通过filterConfig和
dispatcher初始化静态上下文,实例化请求处理阶段需要用到的实例化对象prepare和execute,并初始化包含的URL模式,之后就
回到我自定义的AppFilterDispatcher类中继续自定义的初始化工作。spring通过我在init-param参数注入bean,然后开始我自定
义的初始化函数。这里主要是初始化一些全局变量,如数据字典,模块配置等,不过这里的初始化和Struts2的初始化主线一样只
在启动服务是加载一次,如果数据库中做了修改需要重启服务才能看到变化。struts2初始化工作到这里也就结束了。
1 楼 daomideweixiao 2012-04-10 写的真不错。

读书人网 >软件架构设计

热点推荐