首页 > 代码库 > struts2 框架处理流程

struts2 框架处理流程

struts2 框架处理流程

流程图如下:

技术分享

-->FilterDispatcher过滤器在2.1.3以后被StrutsPrepareAndExecuteFilter所替代,使得在执行Action之前可以添加过滤器了;

-->客户端初始化一个指向servlet容器的request请求,请求经过一系列的过滤器,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action。

1)Struts2框架的大致处理流程:
①     浏览器发出请求,例如请求/login.action等。
②     核心控制器FilterDispatcher根据请求决定调用合适的Action。
③     Struts2的拦截器链自动对请求应用通用功能,例如workflow、validation或
文件上传等功能。
④     回调Action的execute方法,该execute方法先获取用户请求参数,然后执行
某种数据库操作,既可以将数据保存到数据库,也可以数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户请求。

⑤     Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面,
图像,也可以是PDF文档或者其它文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity,FreeMarker等模板技术。
2)流程简介:
橘黄色的部分,如:ActionContextCleanUp和Other Filters(SiteMesh,etc)和FilterDispatcher,属于过滤器层,由这三个过滤器组成过滤器链;蓝色的部分是Struts2框架的核心部分,比如Action代理,相应的配置和ActionMapper等等; 绿色的是相应的拦截器,在Action执行前和执行后都要调用; 浅黄色的部分是开发人员或者用户在使用框架的时候需要实现的部分,比如配置文件,Action,还有页面等 。
    当一个初始的请求到达Servlet容器,这个请求要先经过相应的一系列的标准的过滤器链的处理,最重要的是Filter Dispatcher过滤器,前面的两个过滤器在集成相应的插件的时候会用到(对页面的布局、描述进行统一的控制的时候会用到这些插件),如果请求并不使用相应的插件,那么请求会经过Filter Dispatcher过滤器,Filter Dispatcher作为核心过滤器会接受请求,然后询问ActionMapper来确定请求的Action是否应该被调用,如果请求的Action需要被调用的话,Filter Dispatche核心过滤器就会把核心控制权委派给相应的Action代理(ActionProxy),ActionProxy会询问Action框架的配置管理器(Configuration Manager,由Struts2框架提供的),而Configuration Manager的工作是由Struts.xml这样的一个配置文件来管理的(由开发人员提供,即请求该由那些资源来处理,处理后的结果是怎样的都是由开发人员在Struts.xml配置文件中配置的),那么通过配置文件和配置管理器后,Action代理(ActionProxy)会创建一个实现了命令模式的Action Invocation,实现了Action Invocation后,Action Invocation会在调用真正的业务控制器Action之前一次调用相应的Interceptor拦截器,然后执行Action,把结果会生成一个相应的响应页面(可以是JSP、FreeMarker等等),在执行完响应以后还会一次经过相应的拦截器,执行顺序跟执行Action前正好是相反的,然后响应会通过相应的过滤器链回到客户端,用户接收到响应呈现出最终的结果,也就是说通过过滤器链进来然后生成响应后又通过过滤器链返回到客户端,这就是Struts2框架的处理流程。

 

struts2 框架处理流程