首页 > 代码库 > Struts 2

Struts 2

  Struts 2是基于MVC模式的Web框架,主要包括控制器组件==>C(包括核心控制器StrutsPrepareAndExecuteFilter、业务控制器Action)、模型组件==>M(包括业务逻辑组件和数据库访问组件)和视图组件==>V。

  模型组件==>M:主要是由JavaBean或者是EJB(Enterprise JavaBean)组成。

  视图组件==>V:主要是由html、jsp、Struts2标签等视图技术。

  控制器组件==>C:主要是由核心控制器和业务控制器组成。

    核心控制器:过滤器类StrutsPrepareAndExecuteFilter称为Struts2的核心控制器;

    业务控制器:业务控制器Action,负责处理业务特定请求的类。

  Struts 2的架构:

    (1)StrutsPrepareAndExecuteFilter是Struts 2的核心控制器,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts 2处理,那么就执行Action处理,并停止过滤器链上还没执行的过滤器。

    (2)ActionMapper提供了http请求与Action执行之间的映射,即ActionMapper判断请求是否应该被Struts 2处理,若需要,则ActionMapper需要返回一个对象来描述对应的ActionInvocation的信息。

    (3)ActionProxy是一个特别的中间层,位于Action与xwork之间,可以根据需求来引入更多的实现方式,如WebService来实现等。

    (4)ConfigurationManager 是xwork配置的管理中心,可以理解为struts.xml配置文件在内存中的对应。

    (5)struts.xml是Struts 2的应用配置文件,负责URl与Action之间映射的配置,以及执行后页面跳转的Result配置等。

    (6)ActionInvocation:调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。actionInvocation执行拦截器链、Action及相应的Result.

    (7)Interceptor(拦截器):自动拦截Action,提供了再Action运行之前或在Result运行之后可能需要执行的某些功能代码。类似于javax.servlet.Filter。

    (8)Action:是执行Struts 2中的动作执行单元,用来处理用户请求,并封装业务所需要的数据。

    (9)Result:是不同视图类型的抽象封装类型,不同的视图类型会对应不同的Result实现,Struts 2中支持多种视图类型,如jsp、FreeMarker等.

    (10)Templates:各种视图类型的页面模板,如jsp页面。

    (11)TagSubSystem:Struts 2 的标签库,它抽象了3种不同的视图技术:jsp、velocity和freemarker,可以再不同的视图技术中直接使用这些标签。

   Struts 2的工作流程:

    Struts 2框架的核心控制器负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再转到Action。Struts 2对用户的每一次请求都会创建一个Action并运行,根据其返回值,按照Result配置信息,跳转到新的服务(进入视图或Action)。

    流程:

      (1)用户发送请求给核心控制器StrutsPrepareAndExecuteFilter。

      (2)StrutsPrepareAndExecuteFilter询问ActionMapper,是否是一个Struts 2的请求(是否返回一个非空的ActionMapper对象)。

      (3)若ActionMapper认为该请求是Struts 2请求,那么让核心控制器StrutsPrepareAndExecuteFilter将请求转交给ActionProxy处理。

      (4)ActionProxy通过Configuration Manager 询问框架的配置文件,确定需要调用Action类及Action方法。

      (5)ActionProxy创建一个Configuration的实例,进行初始化。

      (6)ActionInvocation实例在调用Action的过程前后,涉及相关拦截器(Interpretor)的调用。

      (7)Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相应的返回结果。调用结果的execute方法(或者配置指定的方法),渲染结果。

      (8)执行各个拦截器invocation.invoke()之后的代码。

      (9)把结果发送到客户端。

Struts 2