确认在 Into folder 字段中选择了 WebContent/WEB-INF/lib 文件夹,然后单击 Finish。
在 WEB-INF 目录中导入 JAR 文件之后,修改 Web 应用程序的 web.xml 文件以包含 ClickServlet,Apache Click 使用这个 servlet 分派事件。配置这个 servlet 之后,就不再需要修改 web.xml 文件了。web.xml 的内容见清单 3。
清单 3. web.xml 文件
MyFirstClick
ClickServlet
org.apache.click.ClickServlet
0
ClickServlet
*.html
welcome.html
现在创建一个包(比如 com.example.myfirstclick.pages),您的页面类将放在这里。创建包之后,在 Web 项目的 WEB-INF 文件夹中创建新文件 click.xml。在 click.xml 文件中指定刚才创建的包的名称,见清单 4。
清单 4. click.xml 文件
构建示例应用程序
既然项目已经设置好了,就可以开始编写扩展 Apache Click 类的类了。第一个类扩展 Page(所有页面组件的基类)。通过选择 File > New > Other 并选择 Java / Class 在包中创建新的类。一定要输入 org.apache.click.Page 作为 Superclass。
在新类中添加清单 5 所示的内容。
清单 5. WelcomePage 类
package com.example.myfirstclick.pages;
import org.apache.click.Page;
public class WelcomePage extends Page {
// Initialize the value to something
protected String theMessage = "Welcome!";
public WelcomePage() {
// Add the value to the map ("message" = "$message")
addModel("message", theMessage);
}
}
创建了 WelcomePage 类之后,需要创建一个 HTML 页面,它是为浏览器提供输出的模板。因为 Apache Click 的默认模板引擎是 Apache Velocity,HTML 文件与一般的静态 HTML 页面相似。
在 Web 项目的 WebContent 文件夹中创建新的 HTML 页面(名为 welcome.html),添加清单 6 所示的内容。
把 WAR 文件导出到 Tomcat webapps 目录之后,可以通过在浏览器中访问 http://localhost:8080/MyFirstClick/welcome.html 来浏览这个新页面(如果 Web 应用服务器使用不同的端口,或者 Web 应用程序使用不同的名称,URL 可能有变化)。
修改 WelcomePage 中 message 字段的值,然后把它重新部署到 Web 应用服务器中。如果看到修改后的值,就说明应用程序运行正常,可以研究更动态的示例了。
构建表单
既然已经完成了简单的欢迎页面,就可以试试更复杂的功能了。动态的网站不仅仅包含只读的数据,其中大多数都需要用户输入并使用用户输入执行某些操作。典型的示例是通过表单接收输入,然后在另一个网页上显示输入。
对于这个示例,创建另一个扩展 Page 的类。把这个新类命名为 InputPage(见清单 7)。
清单 7. InputPage 类
package com.example.myfirstclick.pages;
import org.apache.click.Page;
import org.apache.click.control.Form;
import org.apache.click.control.Submit;
import org.apache.click.control.TextField;
public class InputPage extends Page {
public Form form = new Form();
private TextField nameField;
public InputPage() {
form.setLabelsPosition(Form.POSITION_TOP);
nameField = new TextField("Enter your name");
form.add(nameField);
form.add(new Submit("Submit", this, "onSubmitClick"));
}
public boolean onSubmitClick()
{
SayHelloPage nextPage = (SayHelloPage)getContext().createPage("/sayHello.html");
nextPage.setName(nameField.getValue());
setForward(nextPage);
return false;
}
}
这个新类在构造方法中创建一个 Form 对象,在其中添加一个用于输入的字段。然后,添加一个 HTML 提交按钮和处理方法(onSubmitClick() 方法)。当单击提交按钮时执行这个处理方法,所以应该在其中创建下一个页面。在添加下一个页面(即 SayHelloPage)之前,代码无法编译。
现在,在 Web 项目的 WebContent 文件夹中创建一个新的 HTML 文件并命名为 input.html。在这个页面上添加一个 $form 变量,它将被替换为 InputPage 类中表单字段的 HTML 输出。完成之后,input.html 文件应该像清单 8 这样。
在 Web 浏览器中访问 http://localhost:8080/MyFirstClick/input.html 以运行这个示例。在文本框中输入一个值并单击 Submit。现在浏览器中会显示这个值。
结束语
通过使用 Apache Click,可以用轻量模型快速编写 Web 应用程序,不需要使用复杂的框架。Apache Click 的简单性让我们能够使用自己的面向对象编程实践和模式。默认的模板引擎 Velocity 不需要定制的标记,让 HTML 代码更接近 HTML 规范的要求。
Apache Click 中的组件和事件模型提供了一种构建 HTML 控件和处理事件的方法,非常容易掌握。