[SSH] Struts2的工作流程

Struts2在Struts的基础上 有了很多的优点 具体的不同 可以参考另一边博文-> Struts2与Struts1的比较

首先整理列出响应流程先后中的一些名词:

(1)过滤器(Filter):过滤器,接收到Url的时候就会产生作用。

(2)StrutsPrepareAndExecuteFilter(2.1.3之前用的是FilterDispatcher):名字已经很能说明问题了,prepare与execute,前者表示准备,可以说是指filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法,即将request请求,转发给对应的 action去处理。

(3)ActionProxy:ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法。归根到底,最后调用的是DefaultActionInvocation.invokeAction()方法。

(4)ConfigurationManager:一般是读取struts.xml。

(5)ActionInvocation:为每一个Action产生一个实例,进行调度。

(6)Interceptor : 同样作为拦截器,只对Action产生作用。

流程图示(对通用图的一个改进):

文字描述:

(1)客户端初始化一个指向Servlet容器(如Tomcat)的request请求。

(2)容器通过web.xml映射获得相应控制器的名字。

(3)请求首先经过一系列的过滤器(ActionContextCleanUp等)。

(4)接下来调用控制器StrutsPrepareAndExecuteFilter,通过ActionMapper获得是否要调用某个Action。

(5)将权力转交给ActionProxy,来处理相应的requset。

(6)ActionProxy通过ConfigurationManager在struts.xml中找到对应的Action信息和相应的Interceptor Stack信息。

(7)ActionProxy创建以个ActionInvocation实例。

(8)ActionInvocation采用命名模式来调用相应的Action,其中按照Interceptor Stack信息先后调用拦截器。

(9)根据Action的配置信息,对request产生result。

(10)result反向通过Interceptor返回给ActionInvocation。

(11)ActionInvocation产生一个HttpServletResponse相应。

(12)将相应发送给客户端。

原文地址:https://www.cnblogs.com/TinyBobo/p/4710138.html