struts(二)——struts框架实现的基本原理

上一篇文章,我们介绍了MVC框架的基本原理,并指出了这个基本框架中存在大量if…else的问题。今天我们来介绍一下struts框架,让struts解决这个问题。

首先,看一下粗略的时序图:

struts(二)——struts框架实现的基本原理_第1张图片


ActionServlet是中央控制器,负责集区URL或分发;

ActionForm负责收集表单数据,并且,struts会将表单数据转换成相应的数据类型。

Action是业务层控制器。


上面就是struts大体上的实现,下面分析一下该struts框架执行流程:

1、终端客户向tomcat发出request请求;

2、tomcat会创建出HttpRequest和HttpResponse实例,并根据用户的Method请求方式,调用中央控制器的doGet或者doPost方法;

3、ActionServlet中央控制器负责截取URL,并且根据截取的URL,取得配置信息,将Action标签里面的信息放在ActionMapping里面。

4、根据ActionMapping中的name名称查找ActionForm,如果配置了ActionForm,那么就到request或session中查找,如果在request或session中存在已经创建的ActionForm,那么将返回;如果不存在,那么会根据ActionForm的完成路径采用反射进行创建,再将创建好的ActionForm放到reqeust或session中

5、首先执行ActionForm中的reset方法进行重置,然后得到表单中所有输入域的name名称,再调用request.getParameterValues(),根据name名称得到相应的值,最后将表单中的数据全部放到一个map中,map中的key为表单输入域的名称,map的value位表单输入域的值(字符串数组),接下来调用一个第三方组件BeanUtils,将Map中的值,根据ActionForm中的setter方法设置到ActionForm上。

6、根据Action的完成类名称到Map中查找,如果存在就在返回Action对象,否则根据Action类的完整名称采用反射去创建,再将创建好的Action放到Map中。所以struts1的Action是单实例的,存在线程安全问题。

7、执行用户自定义的Action中的Execute方法,将ActionMapping,ActionForm,request,response传递过去,将ActionForward返回给ActionServlet。

8、根据返回的ActionForward完成转向。


上面就是struts流程的基本实现。


你可能感兴趣的:(struts)