五步解释Struts处理请求的过程

来源:互联网 发布:freemaker解析json 编辑:程序博客网 时间:2024/04/27 19:35


Struts的核心控制组件是:ActionServlet,它是org.apache.struts.action.ActionServlet类型的Servlet。
   他继承javax.Servlet.Http.HttpServlet,并实现了init(),doGet()/doPost(),destroy()等Servlet生命周期所用到的方法。还添加了一个process(),它本身不复杂,但它会调用其他的复杂方法。
    和spring框架有一样,web容器在启动的时候,先是初始化web.xml中配置的ActionServlet,ActionServlet再加载配置文件。(配置文件写明了不同的请求的不同的ActionMapping)。
    其它接受客户端请求的作出响应的过程如下:
1.    查找servlet并找到相应的action
1、Servlet容器在web..xml文件中寻找url-pattern属性为*.do的<servlet-mapping>元素。
2、Servlet容器根据<servlet-mapping>元素的name属性,在web..xml文件中找到相应的servlet。
2.    查找相应的action
1、Servlet根据浏览器是post还是get请求调用doPost()、doGet()方法,在其中调用ActionServlet的process()方法。
2、Process()获取RequestProcessor对象,调用RequestProcessor对象的process()方法。
3、 RequestProcessor对象的Process()方法,读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URI与action元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的name匹配值找到相应的ActionForm bean。
3.    Actionform重设,赋值,验证
       1、创建新的ActionFormc对象。
       2、保存ActionForm对象。
              保存为用户请求(request)或会话(session)的属性。Actionform的作用域由ActionMapping配置中的scope属性值来决定。名称为配置文件中的ActionMapping中的Attributte决定。
       2、调用ActinForm的reset()方法初始化ActionForm。
              调用reset方法的目的是为了对ActionForm中的值进行复位操作。通常情况要覆盖reset()方法,把ActionForm的值恢复为默认值。
       3、调用ActionForm bean的setter方法为AtionForm赋值。
       4、验证。
如果validate属性为true,ActionServlet会调用form对象的validate方法进行表达验证。此方法返回ActionErros对象,里面包含ActionMessage对象,封装了错误消息。通过标记库的errors标记可以将这里返回的错误信息显示在页面上。Validate()没有返回任何异常,那么就会继承进行下面的处理。
用struts的Validator验证组件比较好用,需求加两个文件validation.xml,validator-rules.xml。这个组件的使用我会在下一次说明。
4.   action进行真正的业务处理
ActionServlet查找这个XXaction实例是否存在,不存在就创建一个实例,然后调用他的excute方法进行业务处理。
5.            返回forward,转到客户端
最后调用mapping.findForward(“abc”)方法,从ActionMapping元素中查找name为abc的forward元素,然后返回这个forward元素对应的页面。其实就是查找ActionMapping本身的HashMap。
 
到此对一个请求的处理完毕。里面贯穿了struts的运行过程。