Struts的工作流程

Struts2框架处理一个用户请求大致可分为如下几个步骤:

1)用户发出一个HttpServletRequest请求。

2)这个请求经过一系列的过滤器Filter来传送。如果Struts2Site Mesh插件以及其他框架进行了集成,则请求首先要经过可选的ActionContextCleanUp过滤器。

3)调用FilterDispatcherFilterDispatcher是控制器的核心,它通过询问ActionMapper来确定该请求是否需要调用某个Action.如果需要调用某个Action,FilterDispatcher就把请求转交给ActionProxy处理。

4)ActionProxy通过配置管理器Configuration Manager 询问框架的配置文件struts2.xml,从而找到需要调用的Action

5)ActionProxy创建一个ActionInvocation的实例,该实例使用命名模式来调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action 相关的所有拦截器Interceptor

6)一旦Action执行完毕,ActionInvocation实例根据struts.xml文件中的配置找到相对于的返回结果,返回结果通常是一个JSP或者FreeMarker的模板。

7)最后,HttpServletResponse响应通过web.xml文件中配置的过滤器返回。

MVC的角度看,可以对Struts2的工作流程做出如下描述:

1)浏览器发出请求

2)控制层中的核心控制器FilterDispatcher根据请求调用相应的Action.

3)Struts2的拦截链(即一系列拦截器)自动对请求调用一些通用的控制逻辑,如数据校验,对数据的封装和文件上传等功能。

4)回调Action中的execute()方法(Action对象的默认方法),并在方法体内调用业务逻辑组件,即自定义的Javabean 等来处理请求,如数据的查询处理等。

5)Execute()方法返回后会产生一个输出。

6)该输出经过拦截器链自动处理,这和开始的拦截器链处理是相反的过程。

7)控制层最后将数据返还并更新视图层。

由此,可以看到Struts2MVC是相对应的,Struts2FilterDispatcher对应着MVC中的控制层,Action对应着模型层,产生的结果Result对应视图层。


猜你喜欢

转载自blog.csdn.net/lyue4/article/details/75503960