Wicket

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Apache Wicket
开发者Apache软件基金会
当前版本7.4.0(2016年7月21日 (2016-07-21)[1]
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言Java
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统跨平台Java虚拟机
    类型Web应用框架
    许可协议Apache许可证2.0
    网站wicket.apache.org

    Apache Wicket,通常称为Wicket,是一种轻量级的基于组件的Java Web应用框架,其概念类似于JavaServer FacesTapestry。它最初由乔纳森·洛克在2004年4月编写。2005年6月发布1.0版。2007年6月,它成功成为Apache顶级项目。[2]

    基本原理[编辑]

    传统的MVC框架依据整个请求和整个网页来工作。在每个请求周期内,输入请求被映射到一个控制器对象的一个方法上,然后控制器产生全部的输出响应,通常是从一个模型拉出数据,并填入一个由特殊的模板标记写成的视图。这种方式保证了应用的控制流简单清晰,但会导致控制器的代码很难被复用

    与此相反,Wicket尽量模仿有状态GUI框架,如Swing. Wicket应用像一棵组件的树,其使用监听器委托来响应基于链接和表单的HTTP请求,并使用类似Swing组件的方式来响应鼠标和键盘事件。Wicket被归类为一个基于组件的框架。

    设计[编辑]

    Wicket使用简单的XHTML作为模板(其强制将展示和业务逻辑进行明确的分离,并允许使用传统的所见即所得设计工具来编辑模板[3])。每个组件对应于XHTML中一个命名的元素,并负责在最后的输出中渲染该元素。网页仅仅是顶级的组件容器,并匹配一个XHTML模板。使用一个特殊标签,一组独立的组件可以抽象成一个单独的组件——面板,然后面板就可以作为一个整体,在该网页,其它网页,甚至其它面板重复使用。

    每个组件由它自己的模型支持,由模型来表现组件的状态。该框架并没有说明组件如何与它们的模型交互,它被视为黑箱,并会在请求间自动序列化持久化。更加复杂的模型,甚至可以做成可拆分的,并提供钩子英语Software hook在每一个请求周期的开始和结束来安排自己的存储和恢复。Wicket并没有特定的对象持久化或ORM层,所以应用通常结合Hibernate对象、EJBPOJO作为模型使用。

    在Wicket中,所有服务器端状态都是自动管理的。永远不要直接使用HttpSession或类似的对象来存储状态,而要让状态关联到组件上。每个服务器端页面组件拥有一个有状态组件的内嵌层级,在那里每个组件的模型最终是一个POJO。

    Wicket一切从简。Wicket没有配置文件需要学习。Wicket是一个对组件结构有一致方法的简单类库。

    举例[编辑]

    一个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;
        }
    }
    
    web.xml
    servlet应用的部署描述符,它安装Wicket作为默认的servlet处理程序,并安排HelloWorldApplication在启动时实例化。
    <?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>
    

    组件[编辑]

    版本[编辑]

    版本号 日期 说明
    1.3.7 2009-07-30 [4]
    1.4 2009-07-30 “……我们开始告别Java 1.4,并要求使用Java 5作为最低JDK版本。通过使用Java 5作为所需的最低平台,我们能够利用Java 5来提高我们API的类型安全性。”[5]
    1.4.1 2009-08-21 [6]
    1.4.9 2010-05-24 “……超过十五处修复和改进”[7]
    1.4.10 2010-08-11 “……超过三十处修复和改进。”[8]
    1.4.16 2011-02-25 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[9]
    1.4.17 2011-04-02 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[10]
    1.4.18 2011-08-09 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[11]
    1.4.19 2011-10-19 “这主要是一个在1.4.x(稳定)分支上发布的小修正。”[12]
    1.5.0 2011-09-07 “Apache Wicket 1.5已经开发了两年了,相比以前的版本,它带来了许多改进。”[13]
    1.5.1 2011-09-29 “……超过40处修复和15处改进。”[14]
    1.5.2 2011-10-24 “……超过25处修复和5处改进。”[15]
    1.5.3 2011-11-14 “……超过40处修复和改进。”[16]
    1.6 2012-09-05 开始集成jQuery,完全基于AJAX请求来控制,改进在浏览器的事件注册,支持大数据集、客户端JavaScript库的依赖管理,实验性地支持websocket
    1.6.3 2013-01-02 jQuery 1.8.2;修正IE7和IE8中的JavaScript错误。
    1.6.4 2013-01-14 jQuery 1.8.3、Bootstrap 2.2.2、JSR 303 BeanValidation支持,层级反馈面板

    参见[编辑]

    参考文献[编辑]

    • Ceregatti Longo, João Sávio. 快速的Apache Wicket 6 1st. Packt出版社英语Packt Publishing. 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出版社英语Packt Publishing. 2011年5月15日: 312 [2016年9月20日]. ISBN 1-84951-160-8. (原始内容存档于2014年7月14日). (英文)
    • Dashorst, Martijn; Hillenius, Eelco. Wicket在运转 1st. 曼宁出版社英语Manning Publications. 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日). 

    注释[编辑]

    1. ^ Apache Wicket——Apache Wicket 7.4.0发布. Wicket.apache.org. [2016-08-19]. (原始内容存档于2021-05-15). (英文)
    2. ^ Dashorst, Martijn. Wicket在Apache成功孵化. 2007-07-20 [2008-03-07]. (原始内容存档于2022-09-26). (英文)
    3. ^ Carleton, Daniel. 用Wicket方式进行Java网页开发. DevX. 2007-10-12 [2008-03-07]. (原始内容存档于2008-03-10). (英文)
    4. ^ Apache Wicket - Apache Wicket 1.3.7标志Wicket 1.3的结束. [2016-09-20]. (原始内容存档于2011-01-05). (英文)
    5. ^ Apache Wicket - Apache Wicket 1.4使类型安全达到了新高度. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
    6. ^ Apache Wicket - Wicket 1.4.1发布. [2016-09-20]. (原始内容存档于2010-09-22). (英文)
    7. ^ Apache Wicket - Wicket 1.4.9发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    8. ^ Apache Wicket - Wicket 1.4.10发布. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
    9. ^ Apache Wicket - Wicket 1.4.16发布. [2016-09-20]. (原始内容存档于2012-04-25). (英文)
    10. ^ Apache Wicket - Wicket 1.4.17发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    11. ^ Apache Wicket - Wicket 1.4.18发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    12. ^ Apache Wicket - Wicket 1.4.19发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    13. ^ Apache Wicket - Apache Wicket发布Wicket 1.5. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    14. ^ Apache Wicket - Wicket 1.5.1发布. [2016-09-20]. (原始内容存档于2014-10-06). (英文)
    15. ^ Apache Wicket - Wicket 1.5.2发布. [2016-09-20]. (原始内容存档于2011-11-01). (英文)
    16. ^ (标题缺失). [2011年11月16日]. [永久失效链接](英文)

    外部链接[编辑]

    介绍文章[编辑]

    博客[编辑]

    文档[编辑]

    Module:Authority_control第183行Lua错误:attempt to index field 'wikibase' (a nil value)