其实很久之前就有读一下三大框架源码的想法了,可是一直没什么时间也静不下心来,由于公司兼容性任务的赶工也快告一段落,下午到家又没有什么事情,于是乎从官网将开源代码struts2,和hibernate的源码下了下,花了近4个小时的时间研究了下struts2源码,目前只是个菜,写的不对的地方肯定有的。
看源代码之前了解下struts2逻辑结构。
(1)——说到浏览struts2源码必然要从struts2的入口类StrutsPrepareAndExecuteFilter开始,在web.xml中配置filter,filter-class是StrutsPrepareAndExecuteFilter类或其子类。
如下:
(2)——StrutsPrepareAndExecuteFilter 实现filter接口,其实就是个过滤器,所以必不可少的三个方法init,doFilter,destory。看单词就可以知道分别做了初始化,请求处理和销毁。
(2-1)先看一下init方法
(2-2)init中比较重要的是Dispatcher dispatcher = init.initDispatcher(config)创建并初始化Dispatcher
dispatcher.init( );
(2-3)Dispatcher的init方法加载了一系列配置文件,挑选了几个不一样的来看看,大多数基本一致
看源代码之前了解下struts2逻辑结构。
(1)——说到浏览struts2源码必然要从struts2的入口类StrutsPrepareAndExecuteFilter开始,在web.xml中配置filter,filter-class是StrutsPrepareAndExecuteFilter类或其子类。
如下:
(2)——StrutsPrepareAndExecuteFilter 实现filter接口,其实就是个过滤器,所以必不可少的三个方法init,doFilter,destory。看单词就可以知道分别做了初始化,请求处理和销毁。
(2-1)先看一下init方法
(2-2)init中比较重要的是Dispatcher dispatcher = init.initDispatcher(config)创建并初始化Dispatcher
dispatcher.init( );
(2-3)Dispatcher的init方法加载了一系列配置文件,挑选了几个不一样的来看看,大多数基本一致
/*1*/ init_DefaultProperties
/*2*/ init_TraditionalXmlConfigurations
[5] /*4*/init_CustomConfigurationProviders
[6] /*5*/ init_FilterInitParameters
再回到StrutsPrepareAndExecuteFilter的init方法,init.initStaticContentLoader(config, dispatcher)通过filterConfig和
dispatcher初始化静态上下文,实例化请求处理阶段需要用到的实例化对象prepare和execute,Struts2的初始化主线一样只
在启动服务是加载一次,如果数据库中做了修改需要重启服务才能看到变化。struts2初始化工作到这里也就结束了。