`

strutsSpring原理

    博客分类:
  • java
 
阅读更多
  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响应给客户
       
     
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics