struts2源码系列(4)--配置文件解析
2016-08-26 00:00
183 查看
1.struts.xml配置文件主要有三个
strut2-default.xml(默认配置的),struts-plugin.xml(如果与spring整合),struts2.xml(自己配置的)2.配置文件的加载流程
每一个配置文件的内容主要分为三类,一类是定义的bean,一类是常量<constant>,一类是package3.解析package过程
入口方法:DefaultConfiguration-->reloadContainer()public synchronized List<PackageProvider> reloadContainer(List<ContainerProvider> providers) throws ConfigurationException { // 解析配置文件中的package标签 for (final ContainerProvider containerProvider : providers) { if (containerProvider instanceof PackageProvider) { container.inject(containerProvider); ((PackageProvider)containerProvider).loadPackages(); packageProviders.add((PackageProvider)containerProvider); } } }
接着进入XmlConfigurationProvider-->loadPackages()
for (Document doc : documents) { Element rootElement = doc.getDocumentElement(); NodeList children = rootElement.getChildNodes(); int childSize = children.getLength(); for (int i = 0; i < childSize; i++) { Node childNode = children.item(i); if (childNode instanceof Element) { Element child = (Element) childNode; final String nodeName = child.getNodeName(); if ("package".equals(nodeName)) { PackageConfig cfg = addPackage(child);//构造一个PackageConfig对象 if (cfg.isNeedsRefresh()) { reloads.add(child); } } } } loadExtraConfiguration(doc); }
接下来就是解析<package>标签元素--
解析属性信息:extends属性--继承的父包名称 abstract--是否是抽象的包默认false name--包的名称 namespace--命名空间默认"" strict-method-invocation--是否是严格的方法执行默认false
如果有继承的父包,则解析父包信息:根据配置的父包的名称,找到是否配置了这样一个包,如果找到了就把对应的父包PackageConfig添加进去,否则抛出异常不存在这样的父包
解析结果类型<result-types>--封装成LinkedHashmap---key 结果类型名称,value值为对应的结果类型class名称
解析拦截器 <interceptors>---封装成LinkedHashmap---key为拦截器名称,value值为拦截器class名称
解析默认的拦截器引用<default-interceptor-ref>--字符串---只取name属性,代表的确实多个拦截器(也就是拦截器栈)
解析默认的class引用<default-class-ref>---字符串--只取class属性,其实是一个类的class
解析全局的结果类型 <global-results>
解析全局的exception映射<global-exception-mappings>
解析action<action>---下面介绍
解析默认的action引用<default-action-ref>
4.解析action过程
入口:XmlConfigurationProvider-->addAction这里同样会解析属性,子标签等,然后封装成ActionConfig,同时会放到PackageConfig的actionConfigs属性下
5.重建运行时配置
DefaultConfiguration--->rebuildRuntimeConfiguration()第3,4步将配置文件解析完毕,仅仅解析出了配置文件里的内容。接下来是重建运行时配置
为什么要重建运行时配置?
因为,配置文件配置的只是用户配置的,还有好多的默认配置,需要重新解析一下,这样才能更好的处理请求。3,4步解析出来,自定义的ActionConfig PackageConfig中的拦截器,异常映射,返回结果类型等可能都是空的,这说明有继承父包的一些属性
比如:extends继承的父包的一些配置,一些全局性的配置(拦截器配置,异常映射配置等),重建以后,ActionConfig所需要的必要信息就全了。(拦截器信息不可少)
相关文章推荐
- STL源码解析-01stl配置文件
- Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 二
- struts2源码解析一 Struts2 日记原理及配置方法
- Redis源码解析(十六)--- config配置文件
- keepalived配置文件解析系列之(一)keepalived简介及配置文件介绍
- keepalived配置文件解析系列之(三)配置文件解析过程
- struts2源码分析之配置文件加载顺序
- Spring源码浅析 -- XML配置文件的载入与解析
- 学习Hibernate源码——配置文件解析,SessionFactory创建
- keepalived配置文件解析系列之(三)配置文件解析过程
- keepalived配置文件解析系列之(一)keepalived简介及配置文件介绍
- Spring源码分析-配置文件的解析(二)
- spring源码解读-加载解析配置文件
- struts2 文件上传和下载,以及部分源码解析
- Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一
- twemproxy源码解析系列三----Twemproxy配置文件解析及相关组件初始化过程
- Struts2学习记录(Struts2各项配置文件解析)
- nginx源码分析--配置文件解析
- struts2 文件上传和下载,以及部分源码解析
- XmlBeanDefinitionReader-----Spring源码解析 配置文件装载与解析