WebWork是一个Java web-application开发框架(development framework). 它专注于提高开发者的生产效率并简化代码. WebWork构建在XWork之上.
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.2,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等
1 XWork提供了普通的(generic)命令模式(command pattern)框架
2 同时也是一个反转控制(Inversion of Control, IoC)容器.
除了上述特性外, WebWork还为其它功能如
1 创建可复用的用户界面模版(UI template)
2 表单(form)控制
3 用户界面主题(UI theme)
4 国际化
5 表单参数与JavaBean的动态映射
6 健壮的客户端及服务器端校验(validation)
提供了强有力的支持.
WebWork 2 : 什么是WebWork
WebWork是一个强大的基于Web的MVC框架, 它构建在一个命令模式框架XWork之上. WebWork的特性包括
1 :用于处理或代理 请求的分发器(Dispatcher)
2 :支持多种视图技术(JSP, Velocity, JasperReports, XML, FreeMarker)的结果类型
3 :一个小而强大的JSP标签库和Velocity宏定义
4 :分发器调用XWork活动来访问和操作模型(Model)并为视图显示模型数据提供方便的途径.
WebWork真正的优势在于它强调简洁和协作能力的根本理念. 使用WebWork将有助于
1 :最小化代码
2 :允许开发人员更多的关注业务逻辑(business logic)和建模(modeling)
3 :不是诸如编写Servlet之类的事情.
一 :特性
1 :灵活的校验(validation)框架, 允许使用XML文件定义校验并通过截取器(Interceptor)在运行时自动应用到活动类(Action class), 从而达到校验与活动类之间的完全解藕(decoupled). 新版本还支持客户端校验.
2 :类型转化(Type conversion)可以很容易的将对象从一个类转换成另一个类型。
3 :强大的表达式语言(Expression Language, EL)建立在OGNL基础之上, 允许:
1 遍历动态对象图
2 执行对象方法
3 使用值栈(ValueStack)实现对多个JavaBean属性的透明访问
4 Webwork也可以使用JSTL.
4 :使用反转控制(Inversion of Control, IoC)管理组件(component)生命周期和依赖关系, 不需要编写注册类创建组件, 组件客户也不需要主动获取组件实例(instance).
5 :Velocity模版, 使得开发人员可以很容易的定制Web页面的外观(look & feel).
6 :截取器(Interceptors)可以动态截取活动(Action)执行前后的处理过程, 这
1 简化了活动的代码
2 提高了代码复用能力
7 :支持国际化(I18n).
8 :可以方便的与其他第三方软件集成, 包括Hibernate, Spring, Pico, Sitemesh.
9 :支持多种视图技术如:
1 JSP
2 Velocity
3 FreeMarker
4 JasperReports
5 XML
10 :使用包(Packages)和名空间(Namespaces)管理数以百计的活动.
二 :背景与目的
WebWork是一个开放源代码项目, 目标是为在短时间内构建复杂网站提供易于理解和维护的工具及开发框架. Java是一个平台以及基于该平台的语言, 尽管他支持although it supports many others as the language in which systems are built, such as JavaScript and XML.
WebWork在构架上基于最佳实践和那些已被证实有价值的设计模式. 它还基于一个强烈的动机: 尽可能的简单, 并具有维护上的灵活性(这实际上是一个困难的平衡).
它也鼓励用户使用恰当的, 符合需要的方式工作. [It also encourages you, as a user, to do things the way you seem fit for your needs.] WebWork能以多种方式配置和使用, 哪种方式更适合于你依赖于使用环境. 下面是一个例子, WebWork支持多种不同的HTML生成技术如:
1 JSP
2 Velocity模版引擎
3 XSLT
它们之间在理念上和技术上都存在很大的差别, 但都能为WebWork所用, 同时, 不同的用户确实需要这些不同的方式. "你不能那么做"是我们尽可能避免的一句话, 而"我们不能"往往是因为有另一个更好, 更适合的工具.
三 :WebWork对MVC Model-1和Model-2的支持
Web应用开发框架的最重要的一个任务是支持
1 逻辑
2 内容
3 表现
相分离的理念. 如果没有做到这一点, 通常会导致维护上的问题, 如果开发团队结构复杂(因为每一个团队成员通常只负责应用的某一方面(aspect)), 还会使应用的开发变得更加困难. 达到分离目的的一般方法是采用MVC(Model-View-Controller)设计模式. 该模式鼓励使用分离的代码来处理:
1 模型(model, 即 " 业务逻辑 " )
2 控制器(controller, 即 " 应用逻辑 " )
3 视图(view).
这样分离之后, 下一个问题是:
控制器的代码与表现部分如何交互
有两种常用的设计模型可以做到这一点, 它们分别被称为Model-1和Model-2. 这两种模型将在下文描述.
Model-1 :
Model-1方式的基本想法是在表示层(presentation layer)如JSP或模版中调用控制器代码. 如果你正在使用JSP, 这意味着你可以通过两种方式执行你的WebWork活动:
1 使用 " webwork:action " 标签调用执行
2 使用 " webwork:bean " 标签像调用JavaBeans一样执行活动.
Model-2 :
在Model-2方式中
1 哪些代码调用控制器
2 哪些视图进行展示
由第三方决定, 通常是一个servlet分发器. 分发器解码HTTP请求中的URL, 然后决定执行哪些代码. 一个包含控制器代码的Java对象被获取并执行, 从而完成对某个应用逻辑和业务逻辑的处理. 当执行结束后, 分发器将请求转交(forward)给一个视图处理器(如一个JSP), 它使用前一个处理的数据绘制结果视图.
四 :如何选择使用?
由于
1 控制器逻辑
2 表现生成
完全解藕, 使得根据执行情况来显示不同结果页面成为可能. 例如, 如果处理出现错误就可以显示一个错误页面而不显示正常的结果页面.
Model-1方式的优点如下.
1 :不需要建立代码与表示之间的映射关系.
2 :易于察看JSP或模版中执行了哪些代码.
3 :如果页面中的一部分要求某个处理过程只允许成功(否则系统失灵),
那么这些代码调用和表现部分的代码(如JSP标签库和HTML)不必分离到新的活动和JSP页面中处理过程. 这样可以提高性能和可读性.
Model-2方式的优点如下.
1 :代码和表现彻底分离. 同一个表现页面可以被多个不同的活动复用,
这些活动可以访问不同的数据但使用相同的方式展示.
2 :如果一个活动可能导致多种状态, 如 " 成功 " , " 需要重新输入 " , 或 " 出现错误 " ,
那么使用Model - 2方式可以很容易的将这些状态映射到不同的页面.
选择使用的首要原则是:
当代码仅仅是获取并显示数据(这被称为read - type code)时使用Model - 1
只要当模型是由活动或一个处理流程所改变时就应当使用Model - 2 .
OGNL是WebWork,XWork中的底层支持组件.非常强大的函数库.