Apache Wicket,通常称为Wicket,是一种轻量级的基于组件的Java Web应用框架,其概念类似于JavaServer Faces和Tapestry。它最初由乔纳森·洛克在2004年4月编写。2005年6月发布1.0版。2007年6月,它成功成为Apache顶级项目。
基本原理
设计
Wicket使用简单的XHTML作为模板(其强制将展示和业务逻辑进行明确的分离,并允许使用传统的所见即所得设计工具来编辑模板)。每个组件对应于XHTML中一个命名的元素,并负责在最后的输出中渲染该元素。网页仅仅是顶级的组件容器,并匹配一个XHTML模板。使用一个特殊标签,一组独立的组件可以抽象成一个单独的组件——面板,然后面板就可以作为一个整体,在该网页,其它网页,甚至其它面板重复使用。
每个组件由它自己的模型支持,由模型来表现组件的状态。该框架并没有说明组件如何与它们的模型交互,它被视为黑箱,并会在请求间自动序列化和持久化。更加复杂的模型,甚至可以做成可拆分的,并提供钩子在每一个请求周期的开始和结束来安排自己的存储和恢复。Wicket并没有特定的对象持久化或ORM层,所以应用通常结合Hibernate对象、EJB或POJO作为模型使用。
在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; } }
<?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>
组件
版本
| 版本号 | 日期 | 说明 |
|---|---|---|
| 1.3.7 | 2009-07-30 | |
| 1.4 | 2009-07-30 | “……我们开始告别Java 1.4,并要求使用Java 5作为最低JDK版本。通过使用Java 5作为所需的最低平台,我们能够利用Java 5来提高我们API的类型安全性。” |
| 1.4.1 | 2009-08-21 | |
| 1.4.9 | 2010-05-24 | “……超过十五处修复和改进” |
| 1.4.10 | 2010-08-11 | “……超过三十处修复和改进。” |
| 1.4.16 | 2011-02-25 | “这主要是一个在1.4.x(稳定)分支上发布的小修正。” |
| 1.4.17 | 2011-04-02 | “这主要是一个在1.4.x(稳定)分支上发布的小修正。” |
| 1.4.18 | 2011-08-09 | “这主要是一个在1.4.x(稳定)分支上发布的小修正。” |
| 1.4.19 | 2011-10-19 | “这主要是一个在1.4.x(稳定)分支上发布的小修正。” |
| 1.5.0 | 2011-09-07 | “Apache Wicket 1.5已经开发了两年了,相比以前的版本,它带来了许多改进。” |
| 1.5.1 | 2011-09-29 | “……超过40处修复和15处改进。” |
| 1.5.2 | 2011-10-24 | “……超过25处修复和5处改进。” |
| 1.5.3 | 2011-11-14 | “……超过40处修复和改进。” |
| 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支持,层级反馈面板 |