1.开启服务端(即本地服务器tomcat),由通过web.xml的配置,启动org.apache.struts.action.ActionServlet,并初始化一些数据(包括struts-configue.xml),将相关请求都交由ActionServlet(中央控制器,继承HttpServlet)来处理
2.浏览器发送请求,如http://localhost:8080/login
3.服务端用request接收并封装有关客户端的数据,将此对象注入到ActionServlet中,实现struts的控制,在ActionServlet中执行如下方法:
1).doGet或doPost方法:二者均调用本类的process方法,在process方法中生成RequestProcessor对象,并调用RequestProcessor对象的process方法(所以说,真正的控制器是RequestProcessor,ActionServlet是初始化数据,并生成RequestProcessor对象,由RequestProcessor执行相应的处理方法),在process方法中执行各种方法;
2).先是processPath()方法:用于截取浏览器端的请求地址。首先是找到prefix,即http://localhost:8080,再通过subString()获得截取地址,即/login.
3).再是processMapping()方法:通过截取地址(即/login)找到对应的ActionMapping,ActionMapping封装了有关对应地址的相关信息(包括AcionForm,ActionForward等等)
4).然后是processActionForm()方法:通过ActionMapping里面的name属性,在scope中找到同名的配置的form-bean,如果没有则直接返回,不处理;否则就根据form-bean中的type属性的配置生成相应的ActionForm对象,并放到配置的scope中.
5).再然后是processPopulate()方法:用于自动收集浏览器端发送过来的数据.
工作流程:
1).先是通过request对象的getParameterNames()获得参数名,再通过getParameterValues()方法循环得到参数值,再构建一个hashMap(名为properties),将名值对put进去;
2).再将生成的ActionForm对象和hashMap对象传入到BeanUtils.populate()中,取出参数名,并找到相应的set方法,将值set到其属性中,在set之前还会进行类型的转换。
6).接着是processForward()方法:用于直接跳转,而不生成action对象.若配置了forword属性,则直接跳转;否则执行 processActionCreate(),生成相应的Action
7).执行 processActionCreate()方法,根据action标签的type属性, 生成相应的Action对象
8).紧接着执行processActionPerform()方法,即Action对象的execute()方法,根据Forword标签生成ActionForword对象,并返回
9). processForwardConfig()方法,用于解析返回的ActionForword对象,实行跳转
大致流程好像是这样