《Struts2框架流程详细分析范文》由会员分享,可在线阅读,更多相关《Struts2框架流程详细分析范文(32页珍藏版)》请在金锄头文库上搜索。
1、.StrutsPrepareAndExecuteFilter实现了Filter接口 init方法为初始化入口StrutsPrepareAndExecuteFilter init方法1. publicvoidinitthrowsServletException2. /初始化辅助类类似一个Delegate3. InitOperationsinit=newInitOperations;4. try5. /FilterHostConfig封装了FilterConfig参数对象6. FilterHostConfigconfig=newFilterHostConfig;7. /LoggerFactory配
2、置加载8. /如果失败使用JdkLoggerFactory9. /TODOSPI10. init.initLogging;11. /TODO创建Dispatcher注册加载器执行加载器创建容器解析xml12. Dispatcherdispatcher=init.initDispatcher;13. init.initStaticContentLoader;14. /预处理类请求处理时才会真正用到15. /1.主要负责在每次请求创建ActionContext清除ActionContext16. /2.当接收到一个请求时通过uri查找ActionConfig创建ActionMapping17. p
3、repare=newPrepareOperationsfilterConfig.getServletContext,dispatcher;/处理请求Delegate18. execute=newExecuteOperationsfilterConfig.getServletContext,dispatcher;this.excludedPatterns=init.buildExcludedPatternsList;19. /空实现留作扩展20. postInit;21. finally22. init.cleanup;23. 24. InitOperations 类似与一个Delegate 主
4、要负责实例化Dispatche再把初始化操作转交给Dispatche init处理1. publicDispatcherinitDispatcher2. /创建Dispatcher3. Dispatcherdispatcher=createDispatcher;4. /核心方法Container容器的创建xml解析在此方法发生5. dispatcher.init;6. returndispatcher;7. 8. privateDispatchercreateDispatcher9. Mapparams=newHashMap;10. forIteratore=filterConfig.getI
5、nitParameterNames;e.hasNext;11. Stringname=e.next;12. Stringvalue=filterConfig.getInitParameter;13. params.put;14. 15. returnnewDispatcherfilterConfig.getServletContext,params;16. Dispatcher init方法 1.针对配置文件 注册不同的加载器 保存到ConfigurationManager类中的一个变量中 2.创建容器 解析xml1. publicvoidinit2. /创建配置操作管理类,会保存元素加载器3
6、. if4. configurationManager=createConfigurationManager;5. 6. try7. /*初始化各种形式加载器,保存到ConfigurationManager#containerProvidersMap集合中8. 没有真正执行加载解析逻辑*/9. /org/apache/struts2/default.properties属性文件里面定义了一系列struts常量10. init_DefaultProperties;/111. /web.xml配置的config参数配置多个用,分开12. /如果没有该参数默认为struts-default.xml框
7、架级,struts-plugin.xml框架级,struts.xml系统级别13. /根据文件名称创建加载器加载xml主要有一下两个解析器14. /XmlConfigurationProviderxwork.xml,15. /StrutsXmlConfigurationProviderstruts相关配置文件配置元素加载器16. init_TraditionalXmlConfigurations;/217. /struts.locale注册18. init_LegacyStrutsProperties;/319. /实例化我们自定义的加载器保存到containerProviders集合中20.
8、 /web.xmlconfigProviders参数多个用,分开21. /配置器必须是ConfigurationProvider接口的实例22. /TODOSPI23. init_CustomConfigurationProviders;/524. /web.xml配置的init-param参数加载器最终会保存到Container容器中25. init_FilterInitParameters;/626. /TODO根据我们在struts.xml定义的常量选择插件类27. /比如集成spring会用到org.apache.struts2.spring.StrutsSpringObjectFac
9、tory28. init_AliasStandardObjects;/729. /*执行加载器*/30. /TODO创建容器解析xml真正执行加载器方法31. Containercontainer=init_PreloadConfiguration;32. /执行当前Dispatcher对象依赖关系注入33. container.inject;34. /额外动作35. init_CheckConfigurationReloading;36. init_CheckWebLogicWorkaround;37. catch38. ifLOG.isErrorEnabled39. LOG.error;4
10、0. thrownewStrutsException;41. 42. ConfigurationManager 主要管理 创建的各种加载器1. publicclassConfigurationManager2. protectedstaticfinalLoggerLOG=LoggerFactory.getLogger;3. /配置元素管理器4. protectedConfigurationconfiguration;5. protectedLockproviderLock=newReentrantLock;6. /创建的xml加载器会保存到次集合中7. privateListcontainer
11、Providers=newCopyOnWriteArrayList;Dispatcher的 createConfigurationManager方法1. protectedConfigurationManagercreateConfigurationManager2. /name-struts3. returnnewConfigurationManager;4. 1.default.properties属性文件加载器1. privatevoidinit_DefaultProperties2. /保存到ConfigurationManager加载器集合中3. configurationManager.addConfigurationProvidernewDefaultPropertiesProvider;4. 2.创建struts相关文件加载器 StrutsXmlConfigurationProvider1. privatevoidinit_TraditionalXmlConfigurations2. /web.xml配置的config3. StringconfigPaths=initParams.getco