在公司用了4年的Wicket了,竟然发现没有写个HelloWorld。

Wicket,全称Apache Wicket, 它是个基于组件的Web应用框架,更多的解释看Wikipedia

官方网站:wicket.apache.org

很遗憾,由于Wicket在国内的普及程度不够,中文相关的文档很少,有的话也就是基于1.2版本的,官方最新的release版本已经是7.x,SNAPSHOT是8.x(Wicket的版本规则从1.5以后就为6.x,7.x,8.x,有点像Java的版本规则)。

这里的HelloWorld是结合Gradle,Jettty完成的,在Eclipse IDE上开发。

什么是Gradle?

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。

其他的自动化构建工具还有Ant和Maven等。

它有丰富的插件机制。

Eclipse上Gradle的配置请先看http://www.cnphp6.com/archives/42868

什么是Jetty?

Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。

其他的容器还有Tomcat,JBoss等。

这里使用Jetty是使用Gradle的Jetty插件。

下面开始HelloWorld。

创建Eclipse项目

以此选择File->Other,搜索 Gradle,选择 Gradle Project,输入Project name为 wicket-helloworld,Sample project选择 Java Quickstart,然后Finish。

调整项目文件结构

由于我们使用Java Quickstart的Sample project,会生成一些我们不需要的文件,所有我们需要调整文件结构(我这里都以cnhalo为包名前缀),调整后的结构为:

文件结构

加入Wicket依赖

我们向Gradle中加入Wicket依赖,在build.gradle中dependencies里加入:

1
compile ‘org.apache.wicket:wicket-core:7.2.0’

我写这遍文章的时候,使用最新的release版本7.2.0,更新的版本可在mvnrepository.com查看。

加入依赖后,在项目的右键,依次点击Gradle->Refresh All,让Gradle去下载依赖的包,等待下载完成后,项目的Gradle Dependencies为:

Gradle Dependencies

配置Jetty

在build.gradle最上面加入:

1
2
apply plugin: 'war'
apply plugin: 'jetty'

在Eclipse项目的的 src/main 下依次创建 webapp/WEB-INF/web.xml:

web.xml

web.xml的内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Wicket Hello World</display-name>
<filter>
<filter-name>App</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>cnhalo.CHApp</param-value>
</init-param>
<init-param>
<param-name>configuration</param-name>
<param-value>DEPLOYMENT</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>App</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

</web-app>

注意,这里的 cnhalo.CHApp 这个类这里还未创建,org.apache.wicket.protocol.http.WicketFilter 这个过滤器是请求进入Web容器后再进入Wicket的入口。

创建Wicket相关代码

创建 cnhalo.CHApp 类,继承org.apache.wicket.protocol.http.WebApplication,全部代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

package cnhalo;

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

/**
*
*
* @author HuangYijie
* @date Mar 13, 2016 9:49:43 PM
*
*/
public class CHApp extends WebApplication {

@Override
public Class<? extends Page> getHomePage() {
return IndexPage.class;
}

}

创建 cnhalo.IndexPage 类,继承 org.apache.wicket.markup.html.WebPage,全部代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

package cnhalo;

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

/**
*
*
* @author HuangYijie
* @date Mar 13, 2016 9:51:10 PM
*
*/
public class IndexPage extends WebPage {

private static final long serialVersionUID = -2856887644490684320L;

public IndexPage() {
add(new Label(“helloworld”, “Wicket Hello World”)); // 在IndexPage.html中对wicket:id=“helloworld”的组件进行匹配
}

}

在 cnhalo.IndexPage 的同级目录中创建 IndexPage.html:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html xmlns:wicket>
<head>
<meta charset=“UTF-8”>
<title>Wicket Hello World</title>
</head>
<body>

<h1 wicket:id=“helloworld”></h1>

</body>
</html>

运行

在Eclipse项目右键,依次选择 Run As -> Run with Jetty,然后浏览器访问 localhost:8080,即可看到 Wicket Hello World

在Tomcat下运行

要在Tomcat下运行,只要打成war包就可以,依次在Eclipse项目右键执行 Gradle -> Task Quick Launcher,输入 war 后回车。Gradle将会打出 war 包,等 Eclipse 的 Console 显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks:
[sts] war
[sts] -----------------------------------------------------
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.276 secs
[sts] -----------------------------------------------------
[sts] Build finished succesfully!
[sts] Time taken: 0 min, 0 sec
[sts] -----------------------------------------------------

刷新Eclipse项目的build,build/libs/wicket-helloworld-1.0.war 即可放入Tomcat的webapps下。


文章中使用软件的版本:

JDK: 1.8.0_45
Gradle: 2.0
Eclipse: Luna Release (4.4.0)

项目源码地址:https://github.com/henryhuang/WicketHelloWorld