原理概述:
1、服务端接受到客户端请求,交由actionServlet处理,会把客户端的表单数据封装到actionForm里面
2、actionServlet会根据web.xml里面的配置去匹配拦截路径,一般都是拦截所有的.do,到指定的配置文件struts-config.xml里面查找对应的action对象3、主要有几个属性,name对应封装的actionform,input匹配拦截的路径和方法,type匹配action的实现类4、action对象处理完业务逻辑,会返回一个actionFoward对象给actionServlet处理5、actionServlet根据配置文件里面的forward标签,跳转到具体页面,给客户端缺点: 1、因为forward都是返回到具体的jsp页面,每一个forward对应配置文件的一个forward标签,每一次改动配置文件都要重启Tomcat 2、 struts1里的action是单例模式的,供多个请求共享,所以不是线程安全的。 解释: (1)、看过源码,请求到达ActionServlet的doGet或doPost方法,最终由processActionCreate方法去返回一个具体的实例 (2)、根据类名去map里面匹配action,存在则返回,不存在则创建,使用了synchronized关键字,action用到的所有的资源都必需统一同步 解决方法:使用局部变量,不使用成员变量详解:
1、服务器接收到客户浏览器请求后,使用ActionForm自动填充客户送来的表单数据到ActionForm Bean对象中,在web.xml文件中对请求进行过滤
action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 3 detail 3 0 action *.do
ActionForm 的实现非常简单,该类只是一个普通的JavaBean,只要为每个属性提供对应的setter 和getter 方法即可,在web.xml中每个ActionForm 对应一个form-bean 元素
2、拦截所有.do请求,读取struts_config.xml中的配置信息
3、将请求分发给相应的Action对象处理
public class AddressMapAction extends DispatchActionSupport implements BaseAction { public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { …… return mapping.findForward("addressmaplist"); } }
4、并返回ActionForward对象给ActionSerlvet对象;根据ActionForward对象的信息(目标页面),ActionServlet再次将Http请求导航到目标页面,并发送到客户端