本文配套源码
概览
Wicket 是最近才启用的 Java Web 开发框架。它是一种开源、轻量、基于组件的框架,这让 Wicket 迅速从开发 Web 应用程序的常用方法中脱颖而出。Wicket 力图通过支持基于纯 HTML 的模板来清晰地界定 HTML 页面设计人员和 Java 开发人员之间的角色界线,此模板可使用任何的 WYSIWYG HTML 设计工具构建,并且经稍许修改就可以具备动态特征。
与其他框架类似,Wicket 也构建在 Sun Microsystems 的 servlet API 之上。不过,与基于 Model-View-Controller (MVC) 模型(比如 Struts)的其他框架不同,Wicket 可以让您从处理请求/响应对象的任务中解脱出来,而这些任务是诸如 servlet 这类技术所固有的。去掉这些任务后,Wicket 让您能将精力更多地集中于应用程序的业务逻辑。
作为一个 Wicket 开发人员,应该考虑构建有状态的可重用组件,而不是构建用来处理请求/响应对象的控制器并且同时还要担心多线程问题。与构建控制器或动作类相反,您创建的是一个页面,在这个页面上放置组件,然后定义每个组件如何响应用户输入。
HelloWorld 示例
要真正展示使用 Wicket 开发基于 Web 的应用程序的简便性,不妨先来开发一个简单的 “Hello World” 示例。在 Wicket 开发一个动态页面通常只会涉及创建如下两个工件:
● HTML 模板
● Java 页面类
注意:必须确保实际的 HTML 文件和页面类名称是相同的(例如,HelloWorld.html 和 HelloWorld.java)而且二者均处在 CLASSPATH 上的相同位置。而且最好要将二者置于相同的目录内。
HTML 模板(HelloWorld.html)
清单 1 中所示的是 HelloWorld 示例的模板文件。
清单 1. HelloWorld.html
<html>
<head><script type="text/javascript" ></script></head>
<body bgcolor="#FFCC00">
<H1 align="center">
<span wicket:id="message">Hello World Using Wicket!</span>
</H1>
</body>
</html>
要制作动态的Web页面,需要确定页面的动态部分并告知Wicket 使用组件来呈现这些部分。在清单1中,我想要获得动态的消息,于是我使用了span 元素来标记该组件,使用wicket:id 属性来标示该组件。
Java 页面类(HelloWorld.java)
清单 2 所示的是 HelloWorld.java 示例的页面类。
清单 2. HelloWorld.java
package myPackage;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage
{
public HelloWorld()
{
add(new Label("message", "Hello World using Wicket!!"));
}
}
页面类中 label 组件的 ID("message")必须要与模板文件内此元素的 Wicket ID(wicket:id="message")相匹配。Wicket 的 Java 页面类包含 Web 页的所有动态行为。而 HTML 模板和页面类之间是一对一的关系。
最后,需要创建一个 Application 对象,当应用程序由 Web 容器加载时,该对象是起始点,而且它还是进行应用程序初始化设置和配置的地方。比如,可以通过覆盖 getHomePage() 方法并返回对应于应用程序主页的页面类来定义应用程序的主页,如清单 3 所示。
清单 3. HelloWorldApplication.java
package myPackage;
import wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
protected void init() {
}
public Class getHomePage() {
return HelloWorld.class;
}
}