Struts1初始化源码解析

struts1的核心控制器是ActionServlet
*  当tomcat启动的时候加载web.xml.在web.xml里面配置Servlet节点.然后就会初始化Servlet.因为在 Servlet里面配置了Servlet-class.它映射的是org.apache.struts.action.ActionServlet.这个 ActionServlet继承了HttpServlet.所以它也据有了Servlet的生命周期.根据Servlet的生命周期开始调用init() 方法.
    * 在init()方法里面首先调用的是initInternal().这个方法初始化的是struts里面的一些资源文件.如错误提示信息.异常信息.
    * 然后调用initOther()方法.这个方法初始化的是web.xml里面除了config开头之外的配置.在这个方法里面它获取的 config和debug参数.初始化ConverUtils对象.初始化这个对象的原因是:从form表单得到的数据全部是String类型的.它会根据需求转换成相对应的类型.
    * 然后调用initServlet()方法:这个方法是初始化的精华.里面运用了digester框架.digester对象与sax的作用一样.只不过它的速度比sax要快.都是把web.xml转换成java对象.是sax的高级版.然后加载Servlet-mapping.加载 Servlet-name.加载url-pattern这三个属性.
   * (initChain)初始化Struts1里面的Chain框架strut1 chain。初始化chain是组织执行一些复杂的处理流程。
如果某个环节失败了,那这条链就会中断。还有chain还可以在链中插入方块(节点)。小方块由command表示。
ActionCommandBase是小方块的父类。
对外扩展是开放的,对内修改是封闭的,这就是所谓的开关原则。


struts-config.xml初始化

通过字符串加载,依赖性就少一点。
1,在initModuleConfig里开始解析struts-config.xml。把struts-config.xml通过digester转换成moduleconfig对象。
链的每一个节点。
2,初始化struts的资源文件,解析后的资源文件放在getServletContext()里
3,初始化struts的插件。
4,初始化formBean,拿到配置的formbean,处理formbean扩展,判断是否设定formbean的类型。
然后检查是不是动态formbean。
5,初始化forward,检查它的扩展,判断是否设定path。
6,初始化异常。
7,初始化action,拿到配置的action,处理action扩展。然后看action里的forward。
8,初始化冻结,moduleConfig.freeze();(冻结方法)冻结当前的模块的配置。因为初始化只执行一次。
9,拿初始化参数,它会判断还有没有其他的struts-config.xml文件,如果有,就把当前struts-config.xml
进行一次初始化操作。然后销毁掉这个对象。

Struts处理请求
.do发生的请求被actionServlet拦截下来,如果是get请求,就调用doGet方法,如果是post请求,
就调用doPost方法。doGet和doPost都会调用process方法,统一处理。

struts是怎么处理.do请求
.do请求是通过职责链模式实现的
struts真正的处理请求不是ActionServlet,而是链。
通过传入用户请求,生成一个上下文的context。(减少耦合度)不过这只针对当前请求。

你可能感兴趣的:(tomcat,xml,Web,servlet,struts)