1. 服务器启动,加载自身config/web.xml, 以及webapps下所有项目的web.xml
2. 创建过滤器对象
创建struts核心过滤器实例
3. 初始化
执行过滤器init()方法
---> 加载默认Properties配置文件
---> 加载xml
struts-default.xml, 【所有需要创建的bean、默认的包(结果类型、所有拦截器、默认的拦截器栈)】
struts-plugin.xml, 【插件配置】
struts.xml 【自定义配置】
用户访问
用户每次访问,执行doFilter()方法:
1. 每次访问struts,都会创建ActionContext对象 【 prepare.createActionContext(request, response);】
1.1 然后,创建ValuStack值栈对象
ValueStack 结构
|-- root 根元素数据
|-- context 非根元素(map)
1.2 给ValustStack封装数据, 所有的map数据都放入值栈
--> 把代表request/session/application的map、以及HttpServletRequest等对象都放入值栈中
1.3 把值栈的map数据,拷贝一份给ActionContext!
所以,我们可以通过ActionContext获取struts运行的数据!
2. ActionMapping
struts把请求的参数(路径等信息), 封装为一个ActionMapping对象!
判断:
---> 如果请求静态资源(jsp), 就放行
---> 如果请求的是action,才执行Action(的过程)
3. 如果访问的是struts的action, 执行:execute.executeAction(request, response, mapping);
(Action创建、拦截器的调用)
4. ConfigurationManager 配置管理器类,管理各配置文件
5. 根据配置管理器对象, 创建Action的代理 , 通过Action的代理,创建Action实例!
6. 再依次默认的18个拦截器