译者注:英文原文来自Jonathan Locke的《Why Wikcet?》,借着Wicket 1.3发布的东风把本人原来翻译并发布在BlogJava上的文章再拿到JavaEye上晒晒,与大家共享。
为什么是Wicket?
如果您正在寻求使用Java开发Web应用程序,目前,您有很多的选择。实际上,存在如此众多的Web应用程序框架显得有点搞笑。来自于互联网一个博客站点的问题:您能说出多少Java Web应用框架的名字?他们展现的结果如下:
框架,到处都是框架,参看后面附带的表格。
为什么要“重新发明轮子”?
从这个角度看,您对于“另一个Web应用程序框架有多好”这个问题总是耿耿于怀?确实,为什们要“重新发明轮子”呢?对这个古老的谚语的答复是:因为这一次可以使轮子更圆!
但是对于高质量的期待并不是构建Wicket框架的唯一动因。甚至有很多的观点,认为没有其他的Web工具集填补这一空白,而Wicket做到了。实际上,Wicket与上面提及的众多框架不太一样。
与Wicket最相近的或许是Tapestry和Echo,但是这种相似性也很有限。和Tapestry一样,Wicket使用特定的HTML属性来标识
组件(Components)声明,这可以方便使用一般的HTML编辑器进行文件编辑。和Echo一样,Wicket拥有一流的组件模型。但是基于
Wicket的应用程序和那些基于Tapestry和Echo的应用程序不一样,这是因为从Wicket框架中两方面都可以受益。您获得了一流的组件模型
和对HTML没有干扰所带来的益处。在很多情况下,这种复合的好处可以带来非常重要的开发优势。
理解了构建Wicket的动机有助于您理解为什么Wicket会表现的不一样。
Echo |
Cocoon
|
Millstone
|
OXF
|
Struts |
SOFIA
|
Tapestry
|
WebWork
|
RIFE
|
Spring MVC
|
Canyamo |
Maverick |
JPublish
|
JATO
|
Folium
|
Jucas
|
Verge
|
Niggle
|
Bishop
|
Barracuda
|
Action Framework
|
Shocks
|
TeaServlet
|
wingS |
Expresso
|
Bento
|
jStatemachine
|
jZonic
|
OpenEmcee
|
Turbine
|
Scope
|
Warfare
|
JMAA
|
Jaffa
|
Jacquard
|
Macaw
|
Smile
|
MyFaces
|
Chiba
|
JBanana
|
Jeenius
|
JWarp
|
Genie
|
Melati
|
Dovetail
|
Cameleon
|
JFormular
|
Xoplon
|
Japple
|
Helma
|
Dinamica
|
WebOnSwing
|
Nacho
|
Cassandra
|
Baritus
|
|
动机
目前存在的大多数Web框架对于服务端的状态管理都仅仅提供了较弱的支持。
这就意味着在Web应用程序中存在着很多特殊的代码来处理和维护繁复的状态管理机制。虽然Wicket并不允许对服务端的状态完全不考虑,但是它在状态管理的简便性和透明化方面做了很多的工作。
在Wicket中,所有服务端的状态都被纳入了自动的管理。您始终不需要直接使用HttpSession对象或者类似的封装对象去存储状态信息。相反,状
态信息已经都与组件关联起来,而在组件后端的数据模型都是传统的Java对象(POJO)。Wicket在每个用户会话期内维护着页面的映射表
(Map)。这个页面映射表(以及每个一面内的组件层次)的目的在于使得框架隐藏了组件以及数据模型访问的细节。您只需要处理简单而熟悉的Java对象,
而Wicket则处理诸如URL、会话期标识以及GET/POST请求的任务。
您接着也会发现这种结构良好的服务端状态使得解决令人恐惧的“后退按钮问题”变得十分的容易。实际上,针对页面内组件数据模型的结构性变化带来的数据过期,Wicket提供了通用而且健壮的解决方案,这个方案可以有效地对浏览器缓存页面进行甄别和过期检测。
最后,Wicket在设计的时候就考虑与诸如JDO和Hibernate的普通Java对象(POJO)序列化框架协同工作。这一点使得构建数据驱动的Web应用程序显得非常简单。
对于很多应用程序来说,必须在额外服务端状态导致服务器负载增加和其带来的好处之间进行权衡,服务端状态管理可以降低开发成本、减少维护成本、加快对市场
的响应时间以及生产高质量的软件。这里提出的基本观点是:软件是十分昂贵、复杂的,而来自于E-machines和Dell的服务器则相对便宜。
在效率和生产性方面,Wicket对JSP的优越性则犹如Java语言对C语言一样。您使用Wicket可以实现的功能使用JSP也都可以实现。甚至于在
内存和CPU消耗方面效率也非常的高。但是使用JSP开发应用程序则需要耗费您更多的时间。最后,因为在JSP中进行状态管理时使用了特别的方式,您可能
发现不少的安全问题,也能看到到处蹦出来的错误。上面提及的大部分框架在这方面仅仅提供了有限的辅助。
大部分现存的框架需要特定的HTML代码
JSP具有最深的侵入性,它允许将Java代码直接嵌入Web页面中。但是,上面列示的框架(除了Tapestry)都不同程度地针对HTML代码引入了特殊的语法。
因为特殊语法改变了单纯而简单的HTML标记的实质,而Web设计者对于这一点是十分的熟悉,所以特殊语法并不是十分得人心。而且预览、编辑和理解这种包含特殊语法的HTML也是十分困难的事情。
Wicket并没引入任何新的HTML语法。相反,它通过Wicket命名空间(namespace)的标准兼容方式扩展了HTML,这完全兼容
XHTML标准。这意味这您可以使用Macromedia Dreamweaver、Microsoft Frontpage、Word、Adobe
Go
Live以及其他现有的HTML编辑器来编辑您的Web页面,并且可以和Wicket的组件协同工作。为了实现这个目标,Wicket始终在Wicket
命名空间内使用单个id属性(“wicket:id”)来标识那些需要框架进行特殊处理的标签。如果您并不喜欢将有Wicket命名空间修饰的标签和属性
展示给您的最终用户,通过简单的设置就可以完全消除它们,从而得到普通的与标准兼容的HTML代码。
HTML中没有特殊的语法意味着设计者可以直接模拟页面,而您可以在开发的过程中直接使用这些页面。向HTML页面中添加Java组件就和设置组件的名称属性一样简单。然后,您可以直接将这些页面交给Web设计人员,他们可以充满信心地对其进行修改。
与其他的应用框架相比,Wicket在各方面的分离上提供更多的支持。Web设计者在对应用程序代码不甚了解的情况下就可以编辑HTML(当然,他们不能
移除组件名称标签,而且不能任意改变组件嵌套的层次,其他的事情都是可以的)。另一方面,编程者只需要关注与HTML混在一起的Java组件,而不需要了
解页面的最终陈现是什么样子。通过这种职能清楚的工作方式,每个人都可以工作得更为顺畅。
现存的框架易用性不好
目前存在的大部分框架工具在对象模型方面做得不够。在一些框架中,对象模型是通过特定的XML来定义的。这些语法令人生厌,而且还需要特定的工具来编辑这
些配置信息。由于这些框架并不是单一的Java类库,您就不能使用包含编辑器、调试器和编译器的IDE工具来编辑它们。
Wicket是化繁为简的代表。在学习Wicket的过程中不需要了解任何配置文件。Wicket就是组件结构良好的普通的类库。在Wicket中,您的
Web应用程序与普通的Swing应用程序类似,而不是JSP应用程序。如果您熟悉Java(特别是如果您熟悉Swing),那么您就已经对Wicket
有不少的了解了。
现存的框架可复用性不好
Tapestry和JSF虽然有可以重用的组件模型,但是您将发现与Wicket相比这并不是特别容易做到的事情。Wicket从设计之初就十分地注重组
件的复用。在Wicket中,从现有的组件扩展编制诸如SignInPanel或者AddressForm的复合组件是十分简单的事情。相对来说,针对浏
览器的新特性编制新的组件也是十分容易的事情。Wicket的组件可以使用JAR格式进行打包,直接通过库引用的方式就可以实现重用——不需要任何配置文
件!
Web编程应该更关注编程乐趣!
这就是我编写Wicket的个人方面的目标。现存的框架在实现开发的直接性、快捷性和简易性方面真正地吸引我。我希望Wicket在Web应用程序开发的建议性和乐趣方面能够迈出重要的一步。
目标
基于上面的这些动机,下面是Wicket的目标:
- 简单(易用性、一致性、易懂性)
- 以POJO为核心
- 所有代码均使用Java编写
- 最小的概念域
- 避免过度地使用XML配置文件
- 全面解决“向后按钮”问题
- 最大限度地类型安全以及编译检查
- 最大限度地分析运行时错误
- 对特定工具集的最小依赖
- 组件、容器和惯例始终保持一致性
- 复用
- 使用Wicket编制的组件具备高度的复用性
- 可复用的组件可以使用JAR文件发布
- 无侵入
- HTML以及其他标记性文件不会编程语法所干涉
- 在标记方面只有一个简单的标签
- 与任何普通的HTML编辑器兼容
- 图形开发人员很容易识别并避免修改框架标签
- 如果设计者不小心删除了标签,则很容易恢复它
- 安全
- 默认情况下代码都是安全的
- 在页面和URL中,只有显式的声明的链接才能公布数据状态
- 具备最大限度类型安全逻辑
- 很容易集成到Java安全框架
- 富有效率,可伸缩性
- 在不牺牲其他目标的前提下保证效率和轻量级
- 可依附的优选会话期支持集群
- 通过与可分离模型的协作,会话复制形成的集群很容易实现和调整
- 完整
-
Wicket团队乐于为开发Java Web应用贡献可用的且特性齐全的框架。核心框架是由本篇文档的作者Jonathan
Locke编写和贡献的。目前的团队包括了很多经验丰富的程序员,他们中的一些人还是上面提及的其他框架的开发者,他们也都拥有构建大型Java
Web应用的经验。我们对自己的处境十分的了解,因此也更能从框架使用者的角度来开发Wicket。
分享到:
相关推荐
**Wicket 指南** **一、Wicket 框架概述** Wicket 是一个开源的、基于组件的 Java Web 开发框架,它提供了一种简单而强大的方式来构建动态、交互性强的Web 应用程序。Wicket 的设计哲学是将Web 页面的视图与业务...
**Wicket Maven 库详解** Wicket Maven 库是一个针对 Apache Wicket 框架的 Maven 存储库,它包含了构建和运行 Wicket 应用程序所需的各种依赖项。Apache Wicket 是一个用于创建 Web 应用程序的开源 Java 框架,它...
Apache Wicket是一款开源的Java Web应用框架,它以组件为基础,提供了丰富的功能来帮助开发者创建动态、交互式的Web应用程序。 【描述】:“自用,在线转移资源,使用带mvn插件的eclipse直接导入即可。”这说明这个...
Wicket的核心是组件模型,每个页面、按钮、表单元素等都可以视为一个组件。这些组件可以嵌套,并且拥有自己的状态和生命周期。通过这种方式,开发者可以更专注于业务逻辑,而不是繁琐的HTML和JavaScript交互。 2. ...
这条命令将基于 `wicket-archetype-quickstart` 模板创建一个名为 `wicket_first` 的项目。 3. **启动 Jetty 服务器** 项目创建完成后,可以在项目目录下运行 Jetty 服务器来测试应用是否正常。通过执行 `mvn ...
**Wicket HelloWorld程序详解** Wicket是一个开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“Wicket的HelloWorld”程序是初学者入门Wicket的典型例子,它展示了如何利用...
**Wicket简单实例详解** Wicket是一款开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“wicket简单实例”是为了帮助初学者理解Wicket的工作原理和基本操作,通过运行这些示例...
- **组件化:** Wicket 强调组件的概念,将 Web 页面视为组件树,每个组件负责显示部分视图或处理用户交互。 - **HTML 和业务逻辑分离:** Wicket 允许开发者使用标准 HTML 来构建界面,而将复杂的业务逻辑封装在 ...
**Wicket 开发指南** ...综上所述,"Wicket开发指南"涵盖了Wicket框架的各个方面,从基础概念到高级特性,为开发者提供了全面的指导。通过学习和实践,你可以掌握使用Wicket构建高效、可维护的Web应用的技能。
1. **什么是国际化(i18n)**:国际化是一种软件设计方法,使得应用程序能够适应不同地区的语言和文化习惯。在Web开发中,这通常涉及到将文本、日期、货币等信息与代码分离,以便根据用户的选择动态显示不同的语言...
此外,Servlet容器还处理并发访问,提高了性能,因为它为每个请求创建线程,而不是像CGI那样为每个请求创建新的进程。 开发Servlet时,通常需要继承`javax.servlet.http.HttpServlet`或`javax.servlet....
首先,我们看到一个名为"Wicket_tree2"的文件,这可能是源代码或者示例项目的第二部分,可能包含了对基础树结构的扩展或改进。在Wicket中,Tree通常由一系列TreeNode对象组成,每个TreeNode代表树中的一个节点,可以...
6. **国际化和本地化**:Wicket提供了强大的I18N支持,学习如何为不同地区和语言创建多语言应用。 7. **安全性**:理解Wicket的安全特性,如防止XSS攻击和CSRF保护,以及如何集成其他安全框架。 8. **性能优化**:...
### Wicket文档知识点详解 #### 1. Wicket简介 **1.1 Wicket前生后世篇** Wicket是一款开源的Java Web应用框架,它最初由Geert Bevin在2003年创建。其设计理念是提供一种简单、直观的方式来构建复杂的Web应用程序...
2. **wicket-extensions.jar**:这个扩展库提供了额外的组件和行为,如图表、表格、日期选择器等,为开发者提供了更多的功能选项,增强了应用程序的用户体验。 3. **wicket-request.jar**:负责处理HTTP请求和响应...
Wicket是一个开源的Java Web应用程序框架,它提供了一种组件化的开发方式,使得Web应用的构建更为简单和直观。这个压缩包包含了一个Wicket的开发指南PDF文档以及一些示例项目,这些都是学习和掌握Wicket框架的重要...
- **Border**:为组件提供装饰效果。 - **Include**:用于包含其他页面或组件。 **5.3 超链接控件** - **Link**:普通链接控件。 - **ExternalLink**:用于跳转到外部URL。 - **PageLink**:用于导航至内部页面。 ...