热门问题
时间线
聊天
视角
Wicket
来自维基百科,自由的百科全书
Remove ads
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是一個對組件結構有一致方法的簡單類庫。
Remove ads
舉例
一個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>
Remove ads
組件
版本
Remove ads
參見
參考文獻
- Ceregatti Longo, João Sávio. 快速的Apache Wicket 6 1st. Packt出版社. 2013年8月26日: 54 [2016年9月20日]. ISBN 1783280018. (原始內容存檔於2016年3月3日).(英文)
- Mader, Jochen. Wicket:基于组件和面向对象——另类的Java Web框架 1st. Entwickler. 2012年3月28日: 220. ISBN 3868020810.(德文)
- Vaynberg, Igor. Apache Wicket食谱 1st. Packt出版社. 2011年5月15日: 312 [2016年9月20日]. ISBN 1-84951-160-8. (原始內容存檔於2014年7月14日).(英文)
- Dashorst, Martijn; Hillenius, Eelco. Wicket在运转 1st. 曼寧出版社. 2008年9月15日: 392 [2016年9月20日]. ISBN 1-932394-98-2. (原始內容存檔於2021年10月3日).{{en}
- Gurumurthy, Karthik. 专业的Wicket 1st. Apress. 2006年9月7日: 328 [2016年9月20日]. ISBN 1-59059-722-2. (原始內容存檔於2010年12月23日).
Remove ads
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads