struts整体架构及详解过程

第一,最开始之前核心控制器叫做StrutsPrepareAndExecuteFilter,一个过滤器它叫做FileerDispatcher。

第二,在讲Struts2配置文件的时候,struts.xml是核心配置文件,而struts文件里面包含所有Action的定义,而Action的创建,Action执行的结果又是由谁去处理,是由Result结果处理器来处理。

还有一个内容就是我们学过的struts标签,这个标签系统和Template结合起来使用,实际上这款我们也了解过了,通过这些内容的学习,有这么一个印象,一个请求过来的时候,经过这个核心控制器,然后再找到具体的Action,Action去执行具体的业务逻辑,去调用具体的业务逻辑,最后在将结果返回给视图控制器Result来进行结果处理,之后返回到标签子系统去显示输出,最后再返回给我的浏览器。

我们印象中struts执行流程,有这么几个问题,对于感刚刚这个流程,第一个问题是URL请求它是如何映射成Action,怎么由这个转化成具体的Action;第二个问题,在这个Action执行之前执行了什么操作,在执行完成以后又经过了哪些处理,对通过整体架构图的学习,按照图里面箭头指定方向来看,struts整体的执行流程,最上面就是servletAPI,HttpServletRequest,这是一个URL请求,客户端请求,请求到达之后,它会经过核心控制器,那么这个核心控制器就是这么一个FilterFDispatcher过滤器,实际上在这个新版本里面,可以认为核心控制器完成了三个部分的内容,上面的两个ActionContentCleanUp和Other filters(SiteMesh,etc),不需要关心是具体干什么,它就是一个核心控制器,它的主要作用就是拿到这个Http请求,请求以后去询问相关的主键,这个请求,是否需要struts的框架来处理,它去询问谁?这个就是第一个问题,一个URL请求,如何映射到定义的Action里面的,顺着箭头,它会去寻找ActionMapping的一个类,什么是ActionMapping?ActionMapping对应是struts配置文件是里面定义的Actionname和URL请求。它去询问actionMappier有什么意义,它把URL请求的requerst拿到以后,去询问相应的ActionMapping,如果找到ActionMapping配置这么一个Mapping,它就继续望往下去处理,否则直接就退出了,不再由struts框架去处理,只要定义了,才会找到,实际上这个ActionMapper,它会在启动的时候,它就在struts文件中,xml文件里面找到对应的ActionMapper,整个存在期间,也就是请求存在期间,它进入struts框架里头,它已经被转化成了一个ActionMapper对象,后续如果找到ActionMapper,在执行这边的流程,也就是说后续的操作,都是在对ActionMapping映射进行处理,对这个URL请求进行处理,然后struts框架会创建一个代理,叫ActionProxy类,这个代理会创建一个可以执行,Actioning的一个代理,怎么创建呢?首先之前传过来的ActionMapping拿到里面有很多属性,把这些属性通过查找这个配置文件,ActionMapping文件里面缺少一个属性,class,那么它根据Action的name,在这个struts.xml文件里面找到具体的类,去创建这么一个class的代理,这个ActionProxy会去由ConfigurationManaer,然后去查找struts.xml文件去找到当前处理ActionMappera的一个class。class不是我们定义的class类型,ActionInvocation还是这个一个代理的类,这个类只对一个Action的代理,实际上可以再去拿到ActionMapping以后,查找到哪个类,它创建的时候并不会直接去创建类的代理,又分了一层,具体ActionInvoction是什么?ActionInvoction是一个接口,定义了一些主要的办法,其中有一个就是invoke的方法,这个方法找到了一个class以后,会去创建一个Action,这个方法是前面就已经知道了。

ActionInvoction是一个具体干活的人,主要去执行Action这个方法,这个方法是由我们去指定的,前端传过来的,要求它去执行的一个方法,但是本身来说不是由Action去执行的,是去创建Action的时候把这个方法给定义好了,而是由ActionInvoction通过反射的机制来动态的调用了ActionMapping的一个方法,最后ActionInvoction它会去执行它的方法,在执行之前,还有一堆处理,这个处理就是ActionInvoction,定义了3个,所有的拦截器机制,正序进,反序出,这个就是递归,递归调完了以后,才回去执行这个Action,这个结果就是字符串,一旦拿到,就需要经过Result事务处理,处理的时候就要使用定义的这些标签,根据使用这些标签,相应的模板,整体是在ActionInvocation去执行的,它在当前的环境里面可以拿到所有的数据,它这个结果就放在ActionInvocation里面去执行,这就是struts核心的架构设计。

第一个问题:URL请求是如何映射成Action,会进行很多操作,会先去查找strut.xml,然后在里面查找有没有ActionMapper,然后ActionMapper对它相应的梳理,最后再去查找这个xml文件具体的类,再去创建这么一个类。才能把URL和具体的处理能够联系起来。

第二个问题:在Action之前执行什么操作,之前还会进行相关的处理,执行完成后,也会进行相关的处理。Action在执行前执行后都会有一定的处理的。

如下图,加深理解:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值