Wicket

Apache Wicket
開發者Apache软件基金会
当前版本
  • 10.0.0 (2024年3月11日)[1]
編輯維基數據鏈接
源代码库
  • git.apache.org/wicket.git
編輯維基數據鏈接
编程语言Java
操作系统跨平台Java虚拟机
类型Web应用框架
许可协议Apache许可证2.0
网站wicket.apache.org

Apache Wicket,通常称为Wicket,是一种轻量级的基于组件的Java Web应用框架,其概念类似于JavaServer Faces和Tapestry。它最初由乔纳森·洛克在2004年4月编写。2005年6月发布1.0版。2007年6月,它成功成为Apache顶级项目。[3]

基本原理

传统的MVC框架依据整个请求和整个网页来工作。在每个请求周期内,输入请求被映射到一个控制器对象的一个方法上,然后控制器产生全部的输出响应,通常是从一个模型拉出数据,并填入一个由特殊的模板标记写成的视图。这种方式保证了应用的控制流简单清晰,但会导致控制器的代码很难被复用

与此相反,Wicket尽量模仿有状态的GUI框架,如Swing. Wicket应用像一棵组件的树,其使用监听器委托来响应基于链接和表单的HTTP请求,并使用类似Swing组件的方式来响应鼠标和键盘事件。Wicket被归类为一个基于组件的框架。

设计

Wicket使用简单的XHTML作为模板(其强制将展示和业务逻辑进行明确的分离,并允许使用传统的所见即所得设计工具来编辑模板[4])。每个组件对应于XHTML中一个命名的元素,并负责在最后的输出中渲染该元素。网页仅仅是顶级的组件容器,并匹配一个XHTML模板。使用一个特殊标签,一组独立的组件可以抽象成一个单独的组件——面板,然后面板就可以作为一个整体,在该网页,其它网页,甚至其它面板重复使用。

每个组件由它自己的模型支持,由模型来表现组件的状态。该框架并没有说明组件如何与它们的模型交互,它被视为黑箱,并会在请求间自动序列化持久化。更加复杂的模型,甚至可以做成可拆分的,并提供钩子英语Software hook在每一个请求周期的开始和结束来安排自己的存储和恢复。Wicket并没有特定的对象持久化或ORM层,所以应用通常结合Hibernate对象、EJBPOJO英语Plain Old Java Object作为模型使用。

在Wicket中,所有服务器端状态都是自动管理的。永远不要直接使用HttpSession或类似的对象来存储状态,而要让状态关联到组件上。每个服务器端页面组件拥有一个有状态组件的内嵌层级,在那里每个组件的模型最终是一个POJO。

Wicket一切从简。Wicket没有配置文件需要学习。Wicket是一个对组件结构有一致方法的简单类库。

举例

一个Hello World Wicket应用有四个文件:

HelloWorld.html
XHTML模板。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
        xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
        xml:lang="en" lang="en">
<body>
    <span wicket:id="message" id="message">消息放在这里</span>
</body>
</html>
HelloWorld.java
将与模板关联的页面组件。而它又结合一个子组件(该标签组件名为“message”)。
package org.wikipedia.wicket;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class HelloWorld extends WebPage {
    /**
     * Constructor
     */
    public HelloWorld() {
        add(new Label("message", "Hello World!"));
    }
}
HelloWorldApplication.java
应用主类,它将首页的请求导向HelloWorld页面组件。
package org.wikipedia.wicket;

import org.apache.wicket.protocol.http.WebApplication;

public class HelloWorldApplication extends WebApplication {
    /**
     * Constructor.
     */
    public HelloWorldApplication() {
    }

    /**
     * @see org.apache.wicket.Application#getHomePage()
     */
    public Class getHomePage() {
        return HelloWorld.class;
    }
}
web.xml
servlet应用的部署描述符,它安装Wicket作为默认的servlet处理程序,并安排HelloWorldApplication在启动时实例化。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" version="2.5">
    <display-name>Wicket Example</display-name>
    <filter>
        <filter-name>HelloWorldApplication</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>org.wikipedia.wicket.HelloWorldApplication</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>HelloWorldApplication</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

组件

  • 基本组件,如表单、链接、循环等等为内置。参见http://www.wicket-library.com/wicket-examples/compref/ (页面存档备份,存于互联网档案馆
  • 更多的,参见https://cwiki.apache.org/confluence/display/WICKET/Index (页面存档备份,存于互联网档案馆

版本

版本号 日期 说明
1.3.7 2009-07-30 [5]
1.4 2009-07-30 “……我们开始告别Java 1.4,并要求使用Java 5作为最低JDK版本。通过使用Java 5作为所需的最低平台,我们能够利用Java 5来提高我们API的类型安全性。”[6]
1.4.1 2009-08-21 [7]
1.4.9 2010-05-24 “……超过十五处修复和改进”[8]
1.4.10 2010-08-11 “……超过三十处修复和改进。”[9]
1.4.16 2011-02-25 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[10]
1.4.17 2011-04-02 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[11]
1.4.18 2011-08-09 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[12]
1.4.19 2011-10-19 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[13]
1.5.0 2011-09-07 “Apache Wicket 1.5已经开发了两年了,相比以前的版本,它带来了许多改进。”[14]
1.5.1 2011-09-29 “……超过40处修复和15处改进。”[15]
1.5.2 2011-10-24 “……超过25处修复和5处改进。”[16]
1.5.3 2011-11-14 “……超过40处修复和改进。”[17]
1.6 2012-09-05 开始集成jQuery,完全基于AJAX请求来控制,改进在浏览器的事件注册,支持大数据集、客户端JavaScript库的依赖管理,实验性地支持websocket
1.6.3 2013-01-02 jQuery 1.8.2;修正IE7和IE8中的JavaScript错误。
1.6.4 2013-01-14 jQuery 1.8.3、Bootstrap 2.2.2、JSR 303 BeanValidation支持,层级反馈面板

参见

  • 自由软件主题

参考文献

  • Ceregatti Longo, João Sávio. 快速的Apache Wicket 6 1st. Packt出版社英语Packt Publishing. 2013年8月26日: 54 [2016年9月20日]. ISBN 1783280018. (原始内容存档于2016年3月3日). (英文)
  • Mader, Jochen. Wicket:基于组件和面向对象——另类的Java Web框架 1st. Entwickler. 2012年3月28日: 220. ISBN 3868020810. (德文)
  • Vaynberg, Igor. Apache Wicket食谱 1st. Packt出版社英语Packt Publishing. 2011年5月15日: 312 [2016年9月20日]. ISBN 1-84951-160-8. (原始内容存档于2014年7月14日). (英文)
  • Dashorst, Martijn; Hillenius, Eelco. Wicket在运转 1st. 曼宁出版社英语Manning Publications. 2008年9月15日: 392 [2016年9月20日]. ISBN 1-932394-98-2. (原始内容存档于2021年10月3日). {{en}
  • Gurumurthy, Karthik. 专业的Wicket 1st. Apress英语Apress. 2006年9月7日: 328 [2016年9月20日]. ISBN 1-59059-722-2. (原始内容存档于2010年12月23日). 

注释

  1. ^ https://wicket.apache.org/news/2024/03/.
  2. ^ Apache Wicket——Apache Wicket 7.4.0发布. Wicket.apache.org. [2016-08-19]. (原始内容存档于2021-05-15). (英文)
  3. ^ Dashorst, Martijn. Wicket在Apache成功孵化. 2007-07-20 [2008-03-07]. (原始内容存档于2022-09-26). (英文)
  4. ^ Carleton, Daniel. 用Wicket方式进行Java网页开发. DevX. 2007-10-12 [2008-03-07]. (原始内容存档于2008-03-10). (英文)
  5. ^ Apache Wicket - Apache Wicket 1.3.7标志Wicket 1.3的结束. [2016-09-20]. (原始内容存档于2011-01-05). (英文)
  6. ^ Apache Wicket - Apache Wicket 1.4使类型安全达到了新高度. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
  7. ^ Apache Wicket - Wicket 1.4.1发布. [2016-09-20]. (原始内容存档于2010-09-22). (英文)
  8. ^ Apache Wicket - Wicket 1.4.9发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  9. ^ Apache Wicket - Wicket 1.4.10发布. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
  10. ^ Apache Wicket - Wicket 1.4.16发布. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
  11. ^ Apache Wicket - Wicket 1.4.17发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  12. ^ Apache Wicket - Wicket 1.4.18发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  13. ^ Apache Wicket - Wicket 1.4.19发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  14. ^ Apache Wicket - Apache Wicket发布Wicket 1.5. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  15. ^ Apache Wicket - Wicket 1.5.1发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
  16. ^ Apache Wicket - Wicket 1.5.2发布. [2016-09-20]. (原始内容存档于2011-11-01). (英文)
  17. ^ (标题缺失). [2011年11月16日]. [永久失效連結](英文)

外部链接

介绍文章

  • IBM Wicket:一个用于构建及测试动态网页的简化框架 (页面存档备份,存于互联网档案馆(英文)
  • Wicket框架一瞥 (页面存档备份,存于互联网档案馆(英文)
  • 关于Wicket 1.0的服务器端讨论 (页面存档备份,存于互联网档案馆(英文)
  • 服务器端讨论 (页面存档备份,存于互联网档案馆(英文)
  • Javalobby采访Martijn Dashorst(项目主席)(英文)
  • Martijn Dashorst讲Wicket(英文)

博客

  • Wicket在运转 (页面存档备份,存于互联网档案馆(英文)
  • Martijn Dashorst (页面存档备份,存于互联网档案馆(英文)
  • 布鲁诺·博尔赫斯(英文)
  • 神秘的程序员 (页面存档备份,存于互联网档案馆(英文)

文档

  • Wicket的可重用组件和模式(英文)
  • (页面存档备份,存于互联网档案馆(英文)
  • 操作指南的Wiki、手册及更多 (页面存档备份,存于互联网档案馆(英文)
  • 在现实世界使用Wicket的众多例子(英文)
  • 一个免费且全面的Wicket用户指南 (页面存档备份,存于互联网档案馆(英文)
顶级项目
  • Abdera英语Apache Abdera
  • Accumulo英语Apache Accumulo
  • ActiveMQ
  • Ambari英语Apache Ambari
  • Ant
  • Aries英语Apache Aries
  • Apache Arrow
  • Apache HTTP Server
  • APR
  • Avro
  • Axis
  • Axis2
  • Beam
  • Bloodhound英语Apache Bloodhound
  • Apache Brooklyn英语Apache Brooklyn
  • Buildr英语Apache Buildr
  • Calcite英语Apache Calcite
  • Camel
  • Cassandra
  • Cayenne英语Apache Cayenne
  • Chemistry英语Apache Chemistry
  • CloudStack英语Apache CloudStack
  • Cocoon英语Apache Cocoon
  • Continuum英语Apache Continuum
  • Cordova
  • CouchDB
  • cTAKES英语cTAKES
  • CXF
  • Deltacloud英语Deltacloud
  • Derby
  • Directory英语Apache Directory Server
  • Drill英语Apache Drill
  • Empire-db英语Apache Empire-db
  • ECharts
  • Felix英语Apache Felix
  • Flex
  • Flink
  • Flume英语Apache Flume
  • Forrest英语Apache Forrest
  • Geronimo英语Apache Geronimo
  • Gora英语Apache Gora
  • Gump英语Apache Gump
  • Hadoop
  • Hama英语Apache Hama
  • HBase
  • Hive
  • Jackrabbit英语Apache Jackrabbit
  • James英语Apache James
  • JMeter英语Apache JMeter
  • Kafka
  • Karaf英语Apache Karaf
  • Kylin英语Apache Kylin
  • Lucene
  • Lenya英语Apache Lenya
  • Mahout英语Apache Mahout
  • Marmotta英语Apache Marmotta
  • Maven
  • MINA英语Apache MINA
  • mod_perl英语mod_perl
  • MyFaces英语Apache MyFaces
  • Nutch英语Apache Nutch
  • ODE英语Apache ODE
  • OFBiz英语Apache OFBiz
  • Oozie英语Oozie
  • OpenEJB英语Apache OpenEJB
  • OpenJPA英语Apache OpenJPA
  • OpenNLP
  • OpenOffice
  • PDFBox英语Apache PDFBox
  • Phoenix英语Apache Phoenix
  • POI
  • Pig英语Pig (programming tool)
  • Pivot英语Apache Pivot
  • Qpid英语Apache Qpid
  • River英语Apache River
  • Roller英语Apache Roller
  • RocketMQ
  • Samza英语Apache Samza
  • ServiceMix英语Apache ServiceMix
  • Shindig英语Apache Shindig
  • Shiro
  • Sling英语Apache Sling
  • Spark
  • Stanbol英语Apache Stanbol
  • Storm
  • SpamAssassin
  • Sqoop
  • Apache C++标准库英语stdcxx
  • Struts
  • Struts 2
  • Subversion
  • Tapestry
  • Thrift
  • Tiles英语Apache Tiles
  • Tika英语Apache Tika
  • Tomcat
  • Trafficserver
  • Turbine
  • Tuscany
  • UIMA
  • Velocity
  • Wave
  • Wicket
  • Wink英语Apache Wink
  • Xalan英语Xalan
  • Xerces英语Xerces
  • XMLBeans英语XMLBeans
  • ZooKeeper
ASF logo
Commons项目
  • Apache Commons Logging英语Apache Commons Logging
  • BCEL英语Byte Code Engineering Library
  • BSF英语Bean Scripting Framework
  • Commons Daemon英语Commons Daemon
  • Jelly英语Apache Jelly
Lucene项目
  • Lucene Java
  • Lucene.Net英语Lucene.Net
  • Nutch英语Nutch
  • Solr
Hadoop项目
其他项目
  • Batik
  • Chainsaw英语Chainsaw (log file viewer)
  • FOP
  • Log4j
  • XAP英语Apache XAP
  • Log4Net
  • Ivy英语Apache Ivy
孵化器项目
  • XAP英语Apache XAP
  • Samza英语Apache Samza
  • Storm
Apache Attic
  • AxKit英语AxKit
  • Beehive英语Apache Beehive
  • Click英语Apache Click
  • Apache BlueSky英语BlueSky Open Platform
  • Cactus英语Jakarta Cactus
  • Jakarta
  • Excalibur英语Apache Excalibur
  • Harmony
  • HiveMind英语Apache HiveMind
  • Lenya英语Apache Lenya
  • Slide英语Jakarta Slide
  • Shale英语Apache Shale
  • Shindig英语Apache Shindig
  • stdcxx英语Apache C++ Standard Library
  • iBATIS
  • XMLBeans英语XMLBeans
许可证标准
  • 分类 分类
  • 共享资源页面 维基共享
C++
  • CppCMS英语CppCMS
  • Wt英语Wt (web toolkit)
CLI
  • ASP.NET
    • Core
    • AJAX
    • 动态数据英语ASP.NET Dynamic Data
    • MVC
    • Razor英语ASP.NET Razor
    • Web Forms
  • DNN英语DotNetNuke
  • BFC英语Base One Foundation Component Library
  • MonoRail英语MonoRail (software)
  • OpenRasta英语OpenRasta
  • Umbraco
ColdFusion
  • CFWheels
  • ColdBox Platform英语ColdBox Platform
  • ColdSpring英语ColdSpring Framework
  • Fusebox英语Fusebox (programming)
  • Mach-II英语Mach-II
  • Model-Glue英语Model-Glue
Common Lisp
  • Caveman2英语Caveman2
  • CL-HTTP英语CL-HTTP
  • UnCommon Web英语UnCommon Web
  • Weblocks
D
  • Vibe.d英语Vibe.d
Haskell
  • Happstack英语Happstack
  • Yesod英语Yesod (web framework)
  • Snap英语Snap (web framework)
Java
  • AppFuse英语AppFuse
  • Flexive英语Flexive
  • Grails英语Grails (framework)
  • GWT
  • ICEfaces英语ICEfaces
  • ItsNat英语ItsNat
  • JavaServer Faces
  • JHipster英语JHipster
  • Jspx英语Jspx-bay
  • JWt英语JWt (Java web toolkit)
  • OpenXava英语OpenXava
  • Play
  • Reasonable Server Faces英语Reasonable Server Faces
  • Remote Application Platform英语Remote Application Platform
  • RIFE英语RIFE
  • Seam英语JBoss Seam
  • Spring
  • Stripes英语Stripes (framework)
  • Struts
  • Tapestry
  • Vaadin英语Vaadin
  • Vert.x
  • WebWork英语WebWork
  • Wicket
  • WaveMaker英语WaveMaker
  • ZK
JavaScript
  • Ample SDK英语Ample SDK
  • Angular英语Angular (application platform)/AngularJS
  • Backbone.js
  • Chaplin.js英语Chaplin.js
  • Closure英语Google Closure Tools
  • Dojo Toolkit
  • Ember.js
  • Extjs
  • JQuery
  • Meteor英语Meteor (web framework)
  • MooTools英语MooTools
  • Node.js
  • Prototype
  • React
  • Rico
  • script.aculo.us英语script.aculo.us
  • Sencha Touch英语Sencha Touch
  • SproutCore英语SproutCore
  • Vue.js
  • Wakanda英语Wakanda (software)
Perl
  • Catalyst
  • Dancer英语Dancer (software)
  • Mason英语Mason (Perl)
  • Maypole
  • Mojolicious英语Mojolicious
  • WebGUI
PHP
  • CakePHP英语CakePHP
  • CodeIgniter
  • Fat-Free
  • FuelPHP
  • Gyroscope英语Gyroscope (software)
  • Horde英语Horde (software)
  • Kohana英语Kohana (framework)
  • Laravel
  • Lithium英语Lithium (software)
  • Midgard英语Midgard (software)
  • MODX英语MODX
  • Nette英语Nette Framework
  • Phalcon
  • PRADO英语PRADO (framework)
  • Qcodo英语Qcodo
  • Silex英语Silex (web framework)
  • SilverStripe
  • Symfony
  • TYPO3
  • Xaraya英语Xaraya
  • XOOPS
  • Yii英语Yii
  • Zend framework
Python
Ruby
  • Camping英语Camping (microframework)
  • Merb英语Merb
  • Padrino英语Padrino (web framework)
  • Ruby on Rails
  • Sinatra英语Sinatra (software)
Rust
  • Yew
Scala
  • Lift
  • Play
  • Scalatra英语Scalatra
Smalltalk
  • AIDA/Web英语AIDA/Web
  • Seaside英语Seaside (software)
其他语言
  • Application Express英语Oracle Application ExpressPL-SQL
  • Grails英语Grails (framework)Groovy
  • Kepler英语Kepler (software)Lua
  • OpenACS英语OpenACSTcl
  • Phoenix英语Phoenix (web framework)Elixir
  • SproutCore英语SproutCoreJavaScript-Ruby
  • YawsErlang
规范控制数据库: 各地 編輯維基數據鏈接
  • 德国