读Structs1源码---执行流程总结

本文详细梳理了Structs1框架的执行流程,从ActionServlet的初始化到处理请求,再到Action的执行和页面转发。强调了Structs1中大量使用单例以提高效率,但也指出这种设计可能引发的线程安全问题,如FormBean和Action的状态管理。在使用Structs1时,需注意配置FormBean的作用域以及确保无状态Action以避免线程安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)、ActionServlet初始方法—init()

这里写图片描述

(二)、doPost、doGet方法

1、对象:

  • ModuleConfig—该对象保存着解析structs-xml的配置信息
  • RequestProcessor—该对象保存着ActionServlet对象、ModuleConfig对象、所有Action对象,并且负责封装FormBean、和将请求分发给对应的Action
  • ActionMapping—保存Action的结构信息

2、doPost、doGet方法都是调用ActionServlet对象的process(request, response)方法
这里写图片描述

3、Processor对象的process(request,response)方法
这里写图片描述

(三)、总结

1、structs框架执行流程:

  • Web容器启动的时候,ActionServlet被初始化,加载struts-config.xml配置文件,封装到ModuleConfig对象中,并将该对象保存到application域中。
  • 当客户端浏览器发起请求到ActionServlet时,ActionServlet调用Processor对象的process()方法对请求进行处理。
  • 从application域中获取到ModuleConfig对象,根据请求的路径和ModuleConfig对象找到对应的Action、ActionMapping和ActionForm。
  • 将request域中的参数根据ActionMapping对象填充到ActionForm对象中
  • 通过processActionPerform()方法调用Action对象中重写的execute()方法,处理业务逻辑,得到返回值,并返回ActionForward对象。
  • 控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的页面
  • 处理结果返回给浏览器。

2、structs框架应用的大量的单例来提高效率

  • 一个项目对应只有一个ActionServlet
  • 一个ActionServlet对应只有一个Processor对象
  • 一个Processor对应只有一个Action的Map集合,每个Action只有一个实例对象
  • 在Struct.xml中会为每个Action设置一个作用域,在每个作用域中对应只有一个FormBean对象

3、 疑惑—个人认为这一步会出现线程安全问题—>由于指令重排序的原因导致半个对象问题
这里写图片描述

4、由于Structs框架中,多处单例,所以需要注意线程安全问题
eg:

  • FormBean作用域只能设置为回话作用域或者请
  • 求作用域,否则会出现线程安全问题,因为FormBean是有状态的Bean对象
  • Action对象不能有状态,否则也会出现线程安全问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值