Wicket

Apache Wicket，通常称为Wicket，是一种轻量级的基于组件的Java Web应用框架，其概念类似于JavaServer Faces和Tapestry。它最初由乔纳森·洛克在2004年4月编写。2005年6月发布1.0版。2007年6月，它成功成为Apache顶级项目。 传统的MVC框架依据整个请求和整个网页来工作。在每个请求周期内，输入请求被映射到一个控制器对象的一个方法上，然后控制器产生全部的输出响应，通常是从一个模型拉出数据，并填入一个由特殊的模板标记写成的视图。这种方式保证了应用的控制流简单清晰，但会导致控制器的代码很难被复用。 与此相反，Wicket尽量模仿有状态的GUI框架，如Swing. Wicket应用像一棵组件的树，其使用监听器委托来响应基于链接和表单的HTTP请求，并使用类似Swing组件的方式来响应鼠标和键盘事件。Wicket被归类为一个基于组件的框架。 Wicket使用简单的XHTML作为模板（其强制将展示和业务逻辑进行明确的分离，并允许使用传统的所见即所得设计工具来编辑模板）。每个组件对应于XHTML中一个命名的元素，并负责在最后的输出中渲染该元素。网页仅仅是顶级的组件容器，并匹配一个XHTML模板。使用一个特殊标签，一组独立的组件可以抽象成一个单独的组件——面板，然后面板就可以作为一个整体，在该网页，其它网页，甚至其它面板重复使用。 每个组件由它自己的模型支持，由模型来表现组件的状态。该框架并没有说明组件如何与它们的模型交互，它被视为黑箱，并会在请求间自动序列化和持久化。更加复杂的模型，甚至可以做成可拆分的，并提供钩子（英语：Software hook）在每一个请求周期的开始和结束来安排自己的存储和恢复。Wicket并没有特定的对象持久化或ORM层，所以应用通常结合Hibernate对象、EJB或POJO（英语：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 （页面存档备份，存于互联网档案馆） 自由软件主题 Vaadin Tapestry Click ZK RichFaces Echo (架构) 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. 2006年9月7日: 328 [2016年9月20日]. ISBN 1-59059-722-2. （原始内容存档于2010年12月23日）.  Apache Wicket——Apache Wicket 7.4.0发布. Wicket.apache.org. [2016-08-19]. （原始内容存档于2021-05-15）. （英文） Dashorst, Martijn. Wicket在Apache成功孵化. 2007-07-20 [2008-03-07]. （原始内容存档于2022-09-26）. （英文） Carleton, Daniel. 用Wicket方式进行Java网页开发. DevX. 2007-10-12 [2008-03-07]. （原始内容存档于2008-03-10）. （英文） Apache Wicket - Apache Wicket 1.3.7标志Wicket 1.3的结束. [2016-09-20]. （原始内容存档于2011-01-05）. （英文） Apache Wicket - Apache Wicket 1.4使类型安全达到了新高度. [2016-09-20]. （原始内容存档于2012-04-25）. （英文） Apache Wicket - Wicket 1.4.1发布. [2016-09-20]. （原始内容存档于2010-09-22）. （英文） Apache Wicket - Wicket 1.4.9发布. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Wicket 1.4.10发布. [2016-09-20]. （原始内容存档于2012-04-25）. （英文） Apache Wicket - Wicket 1.4.16发布. [2016-09-20]. （原始内容存档于2012-04-25）. （英文） Apache Wicket - Wicket 1.4.17发布. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Wicket 1.4.18发布. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Wicket 1.4.19发布. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Apache Wicket发布Wicket 1.5. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Wicket 1.5.1发布. [2016-09-20]. （原始内容存档于2014-10-06）. （英文） Apache Wicket - Wicket 1.5.2发布. [2016-09-20]. （原始内容存档于2011-11-01）. （英文） （标题缺失）. [2011年11月16日]. [永久失效連結]（英文） IBM Wicket：一个用于构建及测试动态网页的简化框架 （页面存档备份，存于互联网档案馆）（英文） Wicket框架一瞥 （页面存档备份，存于互联网档案馆）（英文） 关于Wicket 1.0的服务器端讨论 （页面存档备份，存于互联网档案馆）（英文） 服务器端讨论 （页面存档备份，存于互联网档案馆）（英文） Javalobby采访Martijn Dashorst（项目主席）（英文） Martijn Dashorst讲Wicket（英文） Wicket在运转 （页面存档备份，存于互联网档案馆）（英文） Martijn Dashorst （页面存档备份，存于互联网档案馆）（英文） 布鲁诺·博尔赫斯（英文） 神秘的程序员 （页面存档备份，存于互联网档案馆）（英文） Wicket的可重用组件和模式（英文） （页面存档备份，存于互联网档案馆）（英文） 操作指南的Wiki、手册及更多 （页面存档备份，存于互联网档案馆）（英文） 在现实世界使用Wicket的众多例子（英文） 一个免费且全面的Wicket用户指南 （页面存档备份，存于互联网档案馆）（英文）