??xml version="1.0" encoding="utf-8" standalone="yes"?>
在网上寻了半天,已经有兄弟就Wikcet做了很多工作Q请?a >q里看看?/p>
因ؓ链接地址q是以前保存的,今天试了试好像L出错Q所以烦性就把下载得到的《Wikcet 开发指南》上载来和大家分享共勉吧Q不q,相关权利都属于此文档的译者,大家都只作ؓ学习(fn)之用好了,下面是分h件的下蝲地址Q?/p>
Z上面的这些动机,下面是Wicket的目标:
注:本文由Jonathan Locke~写,相关权利由原作者n有?/strong>
JSPh最q侵入性,它允许将Java代码直接嵌入Web面中。但是,上面列示的框Ӟ除了TapestryQ都不同E度地针对HTML代码引入了特D的语法?/p>
因ؓҎ(gu)语法改变了单U而简单的HTML标记的实质,而W(xu)eb设计者对于这一Ҏ(gu)十分的熟(zhn),所以特D语法ƈ不是十分得h心。而且预览、编辑和理解q种包含Ҏ(gu)语法的HTML也是十分困难的事情?/p>
Wicketq没引入M新的HTML语法。相反,它通过Wicket命名I间QnamespaceQ的标准兼容方式扩展了HTMLQ这完全兼容XHTML标准。这意味q?zhn)可以使用Macromedia Dreamweaver、Microsoft Frontpage、Word、Adobe Go Live以及其他现有的HTML~辑器来~辑(zhn)的Web面Qƈ且可以和W(xu)icket的组件协同工作。ؓ了实现这个目标,W(xu)icket始终在Wicket命名I间内用单个id属性(“wicket:id”Q来标识那些需要框架进行特D处理的标签。如果?zhn)q不喜欢有Wicket命名I间修饰的标{֒属性展C给(zhn)的最l用P通过单的讄可以完全消除它们,从而得到普通的与标准兼容的HTML代码?/p>
HTML中没有特D的语法意味着设计者可以直接模拟页面,而?zhn)可以在开发的q程中直接用这些页面。向HTML面中添加Javalg和讄lg的名U属性一L(fng)单。然后,(zhn)可以直接将q些面交给Web设计人员Q他们可以充满信心地对其q行修改?/p>
与其他的应用框架相比QW(xu)icket在各斚w的分M提供更多的支持。Web设计者在对应用程序代码不甚了解的情况下就可以~辑HTMLQ当Ӟ他们不能U除lg名称标签Q而且不能L改变lg嵌套的层ơ,其他的事情都是可以的Q。另一斚wQ编E者只需要关注与HTML混在一L(fng)JavalgQ而不需要了解页面的最l陈现是什么样子。通过q种职能清楚的工作方式,每个人都可以工作得更为顺畅?/p>
现存的框架易用性不?/strong>
目前存在的大部分框架工具在对象模型方面做得不够。在一些框架中Q对象模型是通过特定的XML来定义的。这些语法o人生厌,而且q需要特定的工具来编辑这些配|信息。由于这些框架ƈ不是单一的JavacdQ?zhn)׃能用包含编辑器、调试器和编译器的IDE工具来编辑它们?/p>
Wicket是化Jؓ的代表。在学习(fn)Wicket的过E中不需要了解Q何配|文件。Wicket是lgl构良好的普通的cd。在Wicket中,(zhn)的Web应用E序与普通的Swing应用E序cMQ而不是JSP应用E序。如果?zhn)熟(zhn)JavaQ特别是如果(zhn)熟(zhn)SwingQ,那么(zhn)就已经对Wicket有不的了解了?/p>
现存的框架可复用性不?/strong>
Tapestry和JSF虽然有可以重用的lg模型Q但是?zhn)发CWicket相比qƈ不是特别Ҏ(gu)做到的事情。Wicket从设计之初就十分地注重组件的复用。在Wicket中,从现有的lg扩展~制诸如SignInPanel或者AddressForm的复合组件是十分单的事情。相Ҏ(gu)_针对览器的新特性编制新的组件也是十分容易的事情。Wicket的组件可以用JAR格式q行打包Q直接通过库引用的方式可以实现重用——不需要Q何配|文Ӟ
Web~程应该更关注编E乐!
q就是我~写Wicket的个人方面的目标。现存的框架在实现开发的直接性、快h和易性方面真正地吸引我。我希望Wicket在Web应用E序开发的性和乐趣斚w能够q出重要的一步?/p>
注:本文由Jonathan Locke~写,相关权利由原作者n有?/strong>
目前存在的大多数Web框架对于服务端的状态管理都仅仅提供了较q支持?/p>
q就意味着在Web应用E序中存在着很多Ҏ(gu)的代码来处理和维护繁复的状态管理机制。虽然Wicketq不允许Ҏ(gu)务端的状态完全不考虑Q但是它在状态管理的便性和透明化方面做了很多的工作?/p>
在Wicket中,所有服务端的状态都被纳入了自动的管理。?zhn)始终不需要直接用HttpSession对象或者类似的装对象d储状态信息。相反,状态信息已l都与组件关联v来,而在lg后端的数据模型都是传l的Java对象QPOJOQ。Wicket在每个用户会话期内维护着面的映表QMapQ。这个页面映表Q以及每个一面内的组件层ơ)的目的在于得框枉藏了lg以及数据模型讉K的细节。?zhn)只需要处理简单而熟(zhn)的Java对象Q而W(xu)icket则处理诸如URL、会话期标识以及GET/POSTh的Q务?/p>
(zhn)接着也会发现q种l构良好的服务端状态得解决o人恐惧的“后退按钮问题”变得十分的容易。实际上Q针寚w面内lg数据模型的结构性变化带来的数据q期QW(xu)icket提供了通用而且健壮的解x案,q个Ҏ(gu)可以有效地对览器缓存页面进行甄别和q期?/p>
最后,W(xu)icket在设计的时候就考虑与诸如JDO和Hibernate的普通Java对象QPOJOQ序列化框架协同工作。这一点得构建数据驱动的Web应用E序昑־非常单?/p>
对于很多应用E序来说Q必d额外服务端状态导致服务器负蝲增加和其带来的好处之间进行权衡,服务端状态管理可以降低开发成本、减维护成本、加快对市场的响应时间以及生产高质量的Y件。这里提出的基本观点是:软g是十分昂c复杂的Q而来自于E-machines和Dell的服务器则相对便宜?/p>
在效率和生性方面,W(xu)icket对JSP的优性则犹如Java语言对C语言一栗?zhn)使用Wicket可以实现的功能用JSP也都可以实现。甚至于在内存和CPU消耗方面效率也非常的高。但是用JSP开发应用程序则需要耗费(zhn)更多的旉。最后,因ؓ在JSP中进行状态管理时使用了特别的方式Q?zhn)可能发现不少的安全问题,也能看到到处y出来的错误。上面提及的大部分框架在q方面仅仅提供了有限的辅助?/p>
注:本文由Jonathan Locke~写,相关权利由原作者承担?/strong>
如果(zhn)正在寻求用Java开发Web应用E序Q目前,(zhn)有很多的选择。实际上Q存在如此众多的Web应用E序框架昑־有点搞笑。来自于互联|一个博客站点的问题Q?zhn)能说出多Java Web应用框架的名字?他们展现的结果如下:
框架Q到处都是框Ӟ参看后面附带的表根{?/p>
Z么要“重新发明轮子”Q?/strong>
从这个角度看Q?zhn)对?#8220;另一个Web应用E序框架有多?#8221;q个问题L耿耿于怀Q确实,Z们要“重新发明轮子”呢?对这个古老的谚语的答复是Q因一ơ可以轮子更圆Q?/p>
但是对于高质量的期待q不是构建Wicket框架的唯一动因。甚x很多的观点,认ؓ没有其他的Web工具集填补这一I白Q而W(xu)icket做到了。实际上QW(xu)icket与上面提及的众多框架不太一栗?/p>
与Wicket最相近的或许是Tapestry和EchoQ但是这U相似性也很有限。和Tapestry一PW(xu)icket使用特定的HTML属性来标识lgQComponentsQ声明,q可以方便用一般的HTML~辑器进行文件编辑。和Echo一PW(xu)icket拥有一的lg模型。但是基于Wicket的应用程序和那些ZTapestry和Echo的应用程序不一Pq是因ؓ从Wicket框架中两斚w都可以受益。?zhn)获得了一的lg模型和对HTML没有q扰所带来的益处。在很多情况下,q种复合的好处可以带来非帔R要的开发优ѝ?/p>
理解了构建Wicket的动机有助于(zhn)理解ؓ什么Wicket会表现的不一栗?/p>
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 |
注:本文由Jonathan Locke~写,相关权利由原作者承担?/strong>
Wicket中的面及其他组仉是支持封装、承和事g触发的Java对象?
易于开?/strong>
因ؓWicket合成了Java和HTMLQ在使用Wicket开发应用的q程中,(zhn)可以最大限度地发挥(zhn)所掌握的Java知识Q而且可以最大限度地发挥(zhn)最喜欢的HTML~辑器在开发过E中的作用?
x点的分离
Wicketq没有将标签Q比如HTML的相x{)与Java代码混合Q而且也没有在标签文g中增MQ何特D的语法。HTML和Java 的领域是不互相干扰的Q它们只是通过Wicket Id来关联,W(xu)ikcet Id在HTML中表Cؓ标签的属性,在Java代码中则表现为组件的属性。因为Wicket中的HTML文g是纯_的HTML文gQW(xu)icket中的Java代码是纯_的Java代码Q编E者和设计者可以最大程度地独立完成工作Q而不需要依赖于M特定的工兗?
安全
Wicket在默认设|的条g下是安全的。URL不对外公布Q何敏感信息,而且所有组件的路径都是相对于会话周期的Q脱M会话周期q些路径变得无效。如果需要在会话周期间共享信息,则必d一些特D的工作才能辑ֈ。在下一个版本的 Wicket中,有计划将URL加密功能d到框架中M此来支持W合要求更高的安全特性?
透明的且具备伸羃性的集群支持
所有基于Wicket的应用不需要额外的讄可以自动支持集。一旦系l的瓉l评估被发现Q那么Wicket启动页面状态的复制。Wicket的下一个版本将对具备零状态~性的客户端模型提供支持?
昑ּ?#8220;后退按钮”问题支持
Wicket支持可配|的面版本理。当用户提交一个表单,而后使用览器的后退按钮来回C前访问过的页面时QW(xu)icket 可以页面对象的状态恢复过来,q且页面以原来的面貌呈现出来。这意味着(zhn)只需要花一点功夫就可以构徏出支?#8220; 后退按钮”的应用?
可复用的lg
在Wicket中,构徏可复用的lg十分的简单。?zhn)不仅可以使用Java中的关键字extends来从现有的组件承而构建新的组Ӟ而且可以使用Panellg来组l一批组件来构徏可复用的lg单元。简单且灉|的、支持本地化的表单校验在Wikcet中编写和使用校验器也是十分的单。而且校验错误消息的定义和本地化也是十分简单的工作?
cd安全的会话周?/strong>
Wicket消除了手动管理HttpSession属性的需求。页面和lg对象被显式地存储在会话周期中Q?zhn)的应用也可以构徏属性类型安全的会话周期的子cR存储在会话周期中的所有对象可以自动地发布到集中?
可自定义的工厂类
Wicket非常h扩展性。许多操作可以通过工厂cL者工厂方法来实现自定义?
可分ȝ模型
Wicket中的模型对象在集系l中的内存和|络占用可以说是轻量U的。当一个模型正在被使用Ӟ它将被装载,主要通过从存储单元来获得数据q激zL型。当q个模型对象已经不再被用时Q(f)时信息可以被重置Q这样就可以消减对象占用的内存数量?
Ҏ(gu)lg
Wicket的边框组件可以得页面的装饰W合可重用的规则。这对一般的Dl构和布局昑־十分的有用?
对HTML所有的基本Ҏ(gu)提供支?/strong>
Wicket支持囑փ标签、链接、表单以及其他一切?zhn)在Web应用开发中可以用到的特性?
对属性的可编E操作?/strong>
Wicketlg可以使用~程的方式来修改MHTML标签的属性?
自动的{?/strong>
一旦表单校验完成,模型可以使用Wicket的{换器来完成更新。大部分的{换器都是pȝ自带的,而编写新的{换器也是很简单的事情?
动态的囑փ
Wikcet使得囑փ的用、共享和生成十分的简单。动态图像可以简单地通过实现l制QpaintQ方法来建立?
可分늚ListView
Wicket中的ListView十分的强大。?zhn)可以Q何组件嵌入到ListViewlg的行中,甚至ListViewq行循环嵌套也可以?PageableListView支持大型数据列表的分导航?
?wi)Şlg
具备D和结炚w择的树(wi)形组件?
本地?/strong>
HTML面、图形和字符串都可以实现本地化?
CZ
Wicket有展C其各项功能的数量巨大的例子?