上一章自己实现Struts2(四)实现ActionInvocation我已经实现好了action和拦截器的调用者ActionInvocation
类,现在就来实现一下Struts2的入口——StrutsPrepareAndExecuteFilter
类。
#分析StrutsPrepareAndExecuteFilter
再把Struts2框架流程图贴上来
大家将FilterDispatcher看成StrutsPrepareAndExecuteFilter好了,它已经被替代的了,我实在是找不到有StrutsPrepareAndExecuteFilter的图呀.。在第一章自己实现Struts2(一)Struts流程介绍和环境搭建我把Struts2框架执行流程简单地介绍了一下,现在我再介绍一下(当然是复制粘贴过来的了)
-
客户端提交一个请求,被StrutsPrepareAndExecuteFilter拦截到了(StrutsPrepareAndExecuteFilter配置的拦截路径一般都是/*)。
-
在StrutsPrepareAndExecuteFilter拦截到请求后会访问ActionMapper来分析请求信息以决定是否调用某个action(因为有可能请求的是其它的静态资源或者不符合规定后缀的)。
-
如果要访问action,那么StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy对象。
-
ActionProxy对象会通过ConfigurationManager加载核心配置文件struts.xml(Struts的action的配置信息文件)。
-
ActionProxy读取到要访问的action的配置信息后创建一个ActionInvocation对象,ActionInvocation实现了命令模式,在action调用的前后递归地调用涉及到的拦截器(Interceptor)。
-
一旦action执行完毕,会返回一个result,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
可以看到跟StrutsPrepareAndExecuteFilter有关的步骤是1、2、3,那我要做的StrutsPrepareAndExecuteFilter不仅要实现步骤1的功能,还把步骤2中ActionMapper要做的事情实现(当然了ActionMapper在Struts2中只是个接口),还有实现步骤4和5中ActionProxy要做的事情,所以我的Struts2是没有ActionMapper和ActionProxy的了,糅合在StrutsPrepareAndExecuteFilter中了。当然这是为了简单,我实现的功能并不多,将来也不会去扩展。
StrutsPrepareAndExecuteFilter还要实现一步就是根据6中ActionInvocation中返回的结果串如SUCCES