XWork核心概念
XWork核心概念
http://www.opensymphony.com/xwork/wikidocs/Core%20Concepts.html
http://www.opensymphony.com/xwork/wikidocs/Basics.html
我们通过一些核心的概念来解释XWork怎样工作。这些核心概念可以分为两部分:体系结构概念和术语
体系结构概念
命令模式框架(泛化的概念)
命令模式框架在XWork中的实现
术语
Action
action指一个类,它的主要功能是执行收到的请求,然后返回响应。即执行一些业务代码,然后最后给出一个结果(Result)。Action的最小实现是一个execute()方法,它定义了一个可以被框架调用的入口点。它的签名如下:
public String execute() throws Exception;
ActionContext
ActionContext在Action调用期间提供执行环境。在每次调用期间,ActionContext都会被创建,而且允许开发人员在线程安全模式下对其属性进行修改。ActionContext提供了一些典型的属性,并且已经被框架设置好了适当的值,以提供给开发者使用。以WebWork2为例,ActionContext的session map已经包装了一个底层的HttpSession对象。This allows access to environment specific properties without tying the core framework to a specific execution environment.
Interceptors
在XWork中,拦截器指可以动态拦截Aciton的执行的对象。拦截器为开发者控制Action的执行提供了大好机会————使用拦截器可以让Action在执行之前和/或执行之后执行开发者指定的代码,也能够阻止一个Action的执行。拦截器为开发者提供了一种封装可重用公共功能函数的方式,使这些功能函数可以用于一个或多个Action。
Stacks
为了处理对一个Action调用多个Interceptor的情况,框架引入了Stack。Stack是一个Interceptor和/或其他Stack的有序序列,当Action被调用的时候,Stack就会被使用。Stack集中了Interceptor的声明,提供了一个配置多个Action的方便的方式。
Results
Result是Action返回的一个字符串常量,它表示Action的执行结果。一些标准的Result已经在框架中被定义好了:error、input、login、none和success。开发者也可以根据自己的需要自己定义Result。
Result Types
Result Type 定义了一些类,当一个Action返回了一个Result的时候,应该用这些类中的其中一个的对象去处理它。开发者可以根据自己的需要定义自己的Result Type。在WebWork2中,Servlet Result Types和Velocity Result Types被创建好了,他们用来处理Web应用中的视图。
Packages
Package是为Action、Result、Result Type、Interceptor、Stack等这些对象进行分组的一种方式,其目的是为了更好的管理和共享公共的配置。Package与Namespace具有相同的语义。
ValueStack
ValueStack是一个在OGNL之上实现的栈。OGNL语言可以遍历这个栈并且找到期望的对象。OGNL语言也提供了一些其他的功能,包括:自动类型转换、方法调用和对象间比较。
Components
XWork提供了ComponentManager接口(DefaultComponentManager类提供了相应的默认实现)来支持IoC(Inversion of Control,控制反转)模式。IoC允许主对象(XWork中即ComponentManager)来控制客户端对象(例如Action、Interceptor等),而不是由客户端对象来控制主对象,这样可以使主对象对客户端的依赖降低。