Struts1.x处理请求的过程

  前些天跟踪了下Struts1.x的源代码,对Struts1.x框架处理请求的整个过程加深了一些理解,现将其简单整理一下。由于完整执行过程涉及的处理比较多,以下笔记只记录核心的处理步骤,忽略上传处理、缓存处理、权限控制、表单验证、异常处理、国际化等的环节。


核心类及其作用
  ActionServlet:中央控制器
  ActionMapping:映射配置文件
  ActionForm:封装表单数据
  Action:调用业务逻辑
  ActionForward:封装转向信息


执行过程
  1. 初始化:Web服务器启动时,从web.xml加载ActionServlet,读取struts-config.xml配置信 息,分别将每个action配置映射到ActionMapping对象,并将这些对象存放在Map结构的mapping中。

  2. 拦截请求服务器拦截客户端请求,请求URL若符合ActionServlet的匹配规则,将其转给ActionServlet处理。ActionServlet根据请求类别调用doGet或doPost方法,然后进入到RequestProcessor对象的process方法中。RequestProcessor是处理请求的核心类。

  3. processPath->截取URL根据规则截取请求的URL,以便跟struts-config.xml中Action配置的path属性匹配。

  4. processMapping->获取ActionMapping对象根据截取的URL,到初始化时生成的mapping中取得ActionMapping对象,此对象封装struts-config.xml中相应Action的配置信息。mapping的key为path,value为ActionMapping。

  5. processActionForm->获取或创建ActionForm对象根据ActionMapping对象中的name属性找到ActionForm的类名,然后先从request或session中查找相应的对象,找到可用的ActionForm对象则返回;否则,根据name属性查找FormBeanConfig对象,此对象封装struts-config.xml中相应的form-bean配置信息,然后采用反射创建ActionForm对象,并将其设置到request或session中。

  6. processPopulate->ActionForm对象完成表单数据收集首先调用ActionForm对象的reset方法,可覆盖此方法进行表单初始化工作;接着取到请求表单中所有的name名,然后分别根据name名取到相应的value值,并成对存放到Map中;最后调用BeanUtils的populate方法将Map中的数据设置到ActionForm对象中。

  7. processActionCreate->获取或创建Action对象根据ActionMapping对象中的type属性获取Action的类名,然后先到Map结构的actions中查找相应的对象,找到Action对象则返回;否则,根据类名采用反射创建Action对象,并将其保持在actions中。创建Action对象采用同步机制保证单实例。

  8. processActionPerform->执行Action对象的execute方法执行Action中的execute方法,并返回ActionForward对象。

  9. processForwardConfig->完成转向根据返回ActionForward对象中的redirect属性进行转发或重定向,转到对应的JSP完成页面渲染。

  请求处理完成。

你可能感兴趣的:(Struts,Struts1.x,请求,流程)