Wicket
Apache Wicket,通常称为Wicket,是一种轻量级的基于组件的Java Web应用框架,其概念类似于JavaServer Faces和Tapestry。它最初由乔纳森·洛克在2004年4月编写。2005年6月发布1.0版。2007年6月,它成功成为Apache顶级项目。[2] 基本原理传统的MVC框架依据整个请求和整个网页来工作。在每个请求周期内,输入请求被映射到一个控制器对象的一个方法上,然后控制器产生全部的输出响应,通常是从一个模型拉出数据,并填入一个由特殊的模板标记写成的视图。这种方式保证了应用的控制流简单清晰,但会导致控制器的代码很难被复用。 与此相反,Wicket尽量模仿有状态的GUI框架,如Swing. Wicket应用像一棵组件的树,其使用监听器委托来响应基于链接和表单的HTTP请求,并使用类似Swing组件的方式来响应鼠标和键盘事件。Wicket被归类为一个基于组件的框架。 设计Wicket使用简单的XHTML作为模板(其强制将展示和业务逻辑进行明确的分离,并允许使用传统的所见即所得设计工具来编辑模板[3])。每个组件对应于XHTML中一个命名的元素,并负责在最后的输出中渲染该元素。网页仅仅是顶级的组件容器,并匹配一个XHTML模板。使用一个特殊标签,一组独立的组件可以抽象成一个单独的组件——面板,然后面板就可以作为一个整体,在该网页,其它网页,甚至其它面板重复使用。 每个组件由它自己的模型支持,由模型来表现组件的状态。该框架并没有说明组件如何与它们的模型交互,它被视为黑箱,并会在请求间自动序列化和持久化。更加复杂的模型,甚至可以做成可拆分的,并提供钩子在每一个请求周期的开始和结束来安排自己的存储和恢复。Wicket并没有特定的对象持久化或ORM层,所以应用通常结合Hibernate对象、EJB或POJO作为模型使用。 在Wicket中,所有服务器端状态都是自动管理的。永远不要直接使用HttpSession或类似的对象来存储状态,而要让状态关联到组件上。每个服务器端页面组件拥有一个有状态组件的内嵌层级,在那里每个组件的模型最终是一个POJO。 Wicket一切从简。Wicket没有配置文件需要学习。Wicket是一个对组件结构有一致方法的简单类库。 举例一个Hello World Wicket应用有四个文件:
<!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>
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!"));
}
}
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>
组件
版本
参见参考文献
注释
外部链接介绍文章
博客
文档
|