知识大全 Struts源码的切片学习之Struts的初始化
Posted 知
篇首语:常识很少会把我们引入歧途。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Struts源码的切片学习之Struts的初始化相关的知识,希望对你有一定的参考价值。
Struts源码的切片学习之Struts的初始化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Author : zhyiE Mail : Date : 转载请注明出处 (copyright by @ zhangyi) 如果你的Web系统使用了Struts系统 那么此系统在启动的时候就会对此框架进行初始化 作为一个可以扩展的系统来说 它就会考虑其扩展性 和用户自定义后的配置的初始化 在web xml文件中 也就是web的配置文件中 我们可以知道 在系统启动的时候 就会初始化此Servlet 其实 Struts的初始化也就是在此实现的 那么在那里实现框架的初始化呢?Servlet在启动的时候就会执行一个叫init()的方法 当然是自动执行 所以 Struts的初始化实现就是在这里实现的 那么 Struts的初始化到底初始化了那些东西呢?要知道这个问题 我们就要大致的知道 Struts系统的几个模块 [ ] Struts框架内部资源模块[ ] 用户扩展的配置模块[ ] 资源文件配置模块[ ] 数据源配置模块[ ] PlugIn配置模块这几个部分在init()的里面是按照顺序初始化的 在初始化的过程中 struts并不是简单的 来顺序初始化 而是使用一定的模式和思想 包括功能的封装 其中内部资源文件和用户的扩展的初始化是独立完成的 而其他的三个模块并不是这样的 这三个模块的初始化是由一个模块来统一管理的 这个模块就叫配置模块 在Struts里面就是ModuleConfig 所以如果要初始化上面的三个模块就先要初始化配置模块 现在你可能要问 配置模块如何初始化? 配置模块的初始化也不是直接 new ModuleConfig()就可以了 他的实现也是通过工厂模式来实现的 所以 要先初始化一个配置工厂才能实现此实例化 配置模块的工厂是ModuleConfigFactory 这是一个抽象类 其createFactory()方法可以实现一个工厂的实例 在这还有一个挺特别的地方 在工厂初始化的时候 定义了工厂类的名字: protected static String factoryClass = onfig impl DefaultModuleConfigFactory ; 所以就可以自己去实现实例化 这样就有了很大的扩展性 为什么呢?因为我们可以根据需要去修改它 那么他就去实现了我们自己的类的实例 其实这也就是struts的配置工厂可以自己实现的原因 补充说明一点 前面提到的扩展初始化就是指的此扩展 至于其他的扩展 我们以后再说 现在 我们已经得到了一个配置的工厂实例了 那么通过此工厂我们可以生产出来一个配置了 也就是我们得到一个ModuleConfig的实例了 ModuleConfig config = factoryObject createModuleConfig(prefix);这个方法就可以实现了 不过 你应该知道上面的工厂是一个抽象方法 而其抽象类不时别的方法 正是此方法 那么此方法到底是谁具体实现了呢?我们上面说了 其实工厂实例化化的时候 其实创建了一个onfig impl DefaultModuleConfigFactory的对象 这个类实现了此方法?如何实现的呢? public ModuleConfig createModuleConfig(String prefix) return new ModuleConfigImpl(prefix);他实例化了一个ModuleConfigImpl 此类正是接口ModuleConfig的实现类 到此也许你也明白一些其中的逻辑 我觉得这是一个很好的实现 现在我才明白 为什么我们要去定义和使用接口 你想 在你初始化工厂之前 你并不知道要使用哪一个ModuleConfig的实现类 但是你一旦确定了使用哪一个配置工厂 不管是默认的 还是你自己的实现 那么你就只能生成对应的实例 正是 那种工厂生产那种产品 正如生产手机的工厂不能生产电视一样 如果你自己定义了工厂的实现的话 那么你就会去实例化一个你自定义的ModuleConfig的实现类 这一部分 其实是我对工厂模式的一点理解 好了 至此 我们得到了一个ModuleConfig的实例 下面 就在此基础上 去初始化其他的模块 就是下面的代码 initModuleConfigFactory(); // Initialize modules as needed ModuleConfig moduleConfig = initModuleConfig( config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig);至于详细的如何配置和实现 我们以后再说 这些配置完成之后 Struts就要去读取你的在web xml的自定义的struts配置文件参数 然后通过循环来取得此文件 逐个解析 主要是多个struts config xml的配置文件 都要去解析 这其实也是struts的灵活扩展之一 代码如下 Enumeration names = getServletConfig() getInitParameterNames(); while (names hasMoreElements()) String name = (String) names nextElement(); if (!name startsWith( config/ )) continue; String prefix = name substring( ); moduleConfig = initModuleConfig (prefix getServletConfig() getInitParameter(name)); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig freeze(); 取得一个配置文件后 执行的过程和我们上面的初始化的过程是一样的 因为任何一个配置文件都可能有这些相同模块的配置 所以要逐个的初始化 从宏观上来说 strtuts的初始化就这些 但是 在详细的实现过程中 还有很多的细节 留待我们慢慢的去研究 理解 深入 cha138/Article/program/Java/ky/201311/27862相关参考
JakartaStruts学习之应用实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文是三
Struts2请求处理流程及源码分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Struts
Struts2分页实现源码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
cha138/Article/program/Java/JSP/201311/20631
知识大全 Struts源码研究 - Action-Input属性篇
Struts源码研究-Action-Input属性篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Struts源码研究 - Bean-Message标签篇
Struts源码研究-Bean-Message标签篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Struts源码研究 - html-Link标签篇
Struts源码研究-html-Link标签篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! S
Struts2初始配置的几点注意 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 按照教程上的方法
struts的验证器是用的xwork里面的验证自定义验证器就是根据源码继承已有的字段验证器而来具体步骤如下: 展开xworkjaropensymphonyxwork validatorvali
10分钟学懂Struts2.0拦截器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 在S