1.启动web容器(web server)
1.1 用web.xml初始化应用,搜索含有<load-on-startup>0</load-on-startup>项的servlet,
并加载入容器(new object过程);
1.2 初始化servlet(用<init-param> <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>)加载了strtus的配置信息,
发现<plug-in>加载扩展组建ContextLoaderPlugIn
根据contextConfigLocation属性文件的value值加载Spring上下文beans.xml
并产生ModuleConfig对象;
1.3 此时web server准备好截获 <url-pattern>*.do</url-pattern>的请求
2.访问应用首页
2.1 发出forward请求 page=“list.do”
2.2 web容器截获请求,并判断请求类别,根据请求字符串后缀(.do)
if 是.do 转交ActionServlet核心控制器处理
2.2.1 ActionServlet调用私有方法 process()方法
2.2.2 在process方法中 再调用Requestprocessor类(核心处理器)的process();
2.2.3 在Requestprocessor 的process()方法中 编码判定、语言判定等程序,并且对请求字符串解析(去掉.后的字符)first;
2.2.4 根据请求串(list)在容器中由struts-config.xml产生的ModuleConfig对象中 搜索与path值相同的action项
2.2.5 在此action中先搜索
if name属性存在
2.2.5.1 根据此name的value值去查找同名的form-bean对象
if form-bean对象已创建
a. 调用此formbean的reset()初始化该对象;
b. 用请求的属性值填充同名的formbean 属性值;
c. 再调用此formbean的validate()验证属性的合法性(返回的ActionErrors对象为null)。
else 根据formbean项的type属性创建formbean对象,再调用reset()、填充、validate()验证
如果合法:
d.再根据请求串(list)搜索action对象是否存在
if 存在 直接用反射调用execute(mapping,form,request,response),返回的forward对象
else 根据type属性值创建action对象(此时只能返回DelegatingActionProxy的实例)
通过DelegatingActionProxy的实例将控制权转交给Spring(传入Action.path值)
在beans.xml中搜索name值等于path值的bean对象(根据class的值反射创建)
此时才返回真正的action实例(对象)
后用反射调用execute(mapping,form,request,response)返回的forward对象;
如果不合法:(返回的ActionErrors对象不为null)
a.直接访问此action项的input属性返回物理视图给ActionServlet
2.2.6 ActionServlet接获控制权,并根据返回的forward对象解析view响应给客户
1.1 用web.xml初始化应用,搜索含有<load-on-startup>0</load-on-startup>项的servlet,
并加载入容器(new object过程);
1.2 初始化servlet(用<init-param> <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>)加载了strtus的配置信息,
发现<plug-in>加载扩展组建ContextLoaderPlugIn
根据contextConfigLocation属性文件的value值加载Spring上下文beans.xml
并产生ModuleConfig对象;
1.3 此时web server准备好截获 <url-pattern>*.do</url-pattern>的请求
2.访问应用首页
2.1 发出forward请求 page=“list.do”
2.2 web容器截获请求,并判断请求类别,根据请求字符串后缀(.do)
if 是.do 转交ActionServlet核心控制器处理
2.2.1 ActionServlet调用私有方法 process()方法
2.2.2 在process方法中 再调用Requestprocessor类(核心处理器)的process();
2.2.3 在Requestprocessor 的process()方法中 编码判定、语言判定等程序,并且对请求字符串解析(去掉.后的字符)first;
2.2.4 根据请求串(list)在容器中由struts-config.xml产生的ModuleConfig对象中 搜索与path值相同的action项
2.2.5 在此action中先搜索
if name属性存在
2.2.5.1 根据此name的value值去查找同名的form-bean对象
if form-bean对象已创建
a. 调用此formbean的reset()初始化该对象;
b. 用请求的属性值填充同名的formbean 属性值;
c. 再调用此formbean的validate()验证属性的合法性(返回的ActionErrors对象为null)。
else 根据formbean项的type属性创建formbean对象,再调用reset()、填充、validate()验证
如果合法:
d.再根据请求串(list)搜索action对象是否存在
if 存在 直接用反射调用execute(mapping,form,request,response),返回的forward对象
else 根据type属性值创建action对象(此时只能返回DelegatingActionProxy的实例)
通过DelegatingActionProxy的实例将控制权转交给Spring(传入Action.path值)
在beans.xml中搜索name值等于path值的bean对象(根据class的值反射创建)
此时才返回真正的action实例(对象)
后用反射调用execute(mapping,form,request,response)返回的forward对象;
如果不合法:(返回的ActionErrors对象不为null)
a.直接访问此action项的input属性返回物理视图给ActionServlet
2.2.6 ActionServlet接获控制权,并根据返回的forward对象解析view响应给客户