处理HTTP请求
在Struts中,当系统收到一个HTTP请求时,就会根据请求所访问的路径在配置文件中查找所映射的Action类。如果配置中指定的ActionForm Bean以及验证要求,系统也会根据请求参数调整Bean的属性并进行验证,(译注:这里指的应该是自动调用Validate方法)。 HTTP请求及回复以及ActionForm都将作为参数传递给Action进行处理。因此从这点上来分析,开发者得用Action对系统进行全面的控制。因此程序员必须手工处理HTTP session信息,并在HTTP请求及回复中控制各种属性。 请求结束时,Action必须返回一个相应的ActionForward以便让Struts框架知道如何进行下一步工作。如果ActionForward要转向JSP页面,程序员还必须编写JSP页面,可能还要使用各种标签库。这是一个费时费力的工作,因为程序员要管理XML配置文件,Java Action类以及定制Tag,不仅容易出错而且降低开发效率。
在Wicket中,当系统收到一个HTTP请求时,Wicket就会根据请求中的信息,找到相应的页面。如果这个请求是通过Form进行提交的,Wicket将会自动抽取参数,并进行验证,然后依照顺序将参数转化成相应的类型,并放入Model中。Wicket将请求转化成各种事件类型,然后以Listener的方式来调用相应的控件,程序员可以在事件代码中代理业务逻辑代码,并设置回复页面。Page类是通过反射进行调用并输出的。render的步骤依次查看页面上每一个控件,并由每个控件来输出自己。每一个控件可以在代码中输出HTML,也可以使用HTML标记文件来输出HTML。在控件与HTML绑定时,唯一要做的就是保证HTML元素属性中的命名(如 wicket:id="id1",译注:目前可以通过命名空间来换成其它方式,如id="wicket-id1")与控件名称相对应。(译注:如果有一个控件的名称为id1,this.add(new Label("id1","Hello")),在HTML页面中应该有一个元素如下 <span wicket:id="id1"></span>,Wicket会自动将其换成 <span wicket:id="id1">Hello</span>)
Wicket框架功能更强的原因如下:
- 每一个Wicket控件都知道如何处理自己事件。因此,一旦你写了一个控件并放置在页面上,并编写了相关事件处理代码,该代码就会自动被Wicket调用。一个页面有超过20个控件,如果在最复杂的情况下,程序员需要编写20个事件处理代码。如果使用Strust,你可能要写20个不同的Action类,或者使用if/else语句进行逻辑转向处理,这种情况下的XML配置文件难以维护(译注:如果一定要用Struts的话,可以使用DispatchAction简化开发工作)。
- Wicket使你开发时,完全基于可重用控件及相关事件,你不要因为要配合 HTPP请求<-->回复这种机制来改变你的OO设计。
- 使用Wicket,代码的编写量要少很多,比Struts要少得多(译注:不完全这么认为,毕竟系统中业务代码占的比重很大)。因为可复用控件可以在内部包含更多的逻辑代码。利用Wicket标签结合HTML文件要比JSP+Tag要小的多,也不再需要额外的XML配置文件。
如果你曾经使用过Windows的API编写过程序,或者使用过Visual Basic或者Delphi,要接下的比较有益于你了解Wicket。编写Struts程序就象使用Windows的API一样:接收原始信息,解析该信息并进行处理。 (译注:这里忽略了一句话,因为觉得没有意义) Windows的API基于过程而且利用消息循环进行处理。
另一方面,Delphi就将Widnow的消息循环封装在一个TApplication类中,结合其它的类进行开发工作。Delphi的系统类(译注:原文为build-in,个人认为是Delphi提供的一些类),通过解析原始消息,并反馈信息的确认。接下来信息就会被转化成一个事件并发送给合适的对外。
与Windows程序相似, Wicket程序也有资源文件,使用property文件保存文本信息,使用HTML模板描述GUI,所以使用Wicket开发Web程序,就和使用Delphi开发桌面程序一样。
Servlet API & HTTP Protocol 的封装
Struts并没有封装Servlet API及HTTP协议的细节,使用Struts必须熟悉使用HttpServletRequest对象, 在Struts中HttpServletResponse和HttpSession类与Action, ActionForm, ActionMapping,ActionForward类一样重要。你开发Struts程序时,必须是基于请求<-->回复的HTTP协议。这也是所有基于Model2 MVC WEB开发框架的内存弱点。
而Wicket封装了Servlet API及HTTP协议的细节。对于大部分的程序,开发人员并不需要了解这些细节(译注:就我个人观点而言,这个说法有点问题,对于大部分程序的开发,只有小部分开发人员和小部分开发内容需要了解个别细节内容,如Session等信息,好象WicketSession有点问题)。即使对于非常复杂的程序,你也只是偶尔需要了解一下Wicket对协议的抽象类。使用Wicket开发,开发人员只需要使用Java控件类,POJO,一些基于POJO设计的业务模型,以及HTML标记页面文件。
相关推荐
本文将对比两个流行的Java Web框架:Wicket和Struts,旨在帮助开发者更好地理解它们的特点、优势以及适用场景。 **Wicket** Wicket是一个基于组件的MVC(Model-View-Controller)框架,它的核心理念是"一切都是一...
通过与这些框架的作者交流,可以更深入地了解每个框架的设计理念和发展方向。例如,Jacob Hookom(JSF)、Geert Bevin(RIFE)、Gavin King(Seam)、Rob Harrop(Spring MVC, Spring Web Flow)、Tim Fennell...
总的来说,Wicket基础知识培训会涵盖从Servlet技术到Wicket框架的原理及其与Struts的对比,帮助学员建立起Web开发的坚实基础,并掌握使用Wicket构建动态Web应用的技能。在实际工作中,理解并熟练运用这些知识能够...
**Wicket开发指南** Wicket框架是一个基于Java的开源Web应用程序框架,它的设计目标是提供一种简单、声明式和组件化的编程...《Wicket开发指南》将帮助你快速上手并精通这个框架,从而提升你的开发效率和代码质量。
**1.3 Wicket与其他Web框架的比较** - **Struts概述**:Struts是一个流行的MVC框架,但相比Wicket来说,它的配置更为复杂,学习曲线较高。 - **Tapestry概述**:Tapestry也采用了组件化的方式,但在灵活性和性能...
- **与 Struts 比较:** Wicket 更加注重组件化和 MVC 的分离,提供更好的代码组织结构;而 Struts 更侧重于表单处理和数据验证。 - **与 Tapestry 比较:** 两者都强调组件化开发,但 Wicket 在性能优化方面做得...
**Wicket 指南** **一、Wicket 框架概述** Wicket 是一个开源的、基于组件的 Java Web 开发框架,它提供了一种简单而强大的方式来...阅读《Wicket开发指南-简体版.pdf》将进一步帮助你掌握这个框架的精髓和实践技巧。
**1.3 Wicket与目前Web框架的比较** - **1.3.1 Struts概述** Struts是Apache软件基金会下的一个项目,也是最早流行起来的Java Web MVC框架之一。相比于Wicket,Struts更侧重于表单处理和视图层的展示。 - **...
这三个框架覆盖了Web应用开发的主要方面,但它们之间以及与其他组件(如数据库、中间件等)的集成非常复杂。这种复杂性导致调试和测试变得更加困难,特别是在遇到性能瓶颈时,定位问题根源变得非常耗时。 ##### 2. ...
Wicket 是一个开源的、基于Java的Web应用程序框架,它以其组件化、模型-视图-控制器(MVC)架构和轻量级特性而受到开发者们的青睐。本指南将深入探讨Wicket的核心概念、工作原理以及如何有效地利用它来构建动态、...
**Wicket + Spring 整合详解** 在Java Web开发领域,Wicket和Spring都是非常流行的框架,它们分别在用户...通过`wicket-test-02`项目,初学者可以学习到如何将这两个框架有效地融合在一起,从而提升自己的开发技能。
Wicket Maven 库是一个针对 Apache Wicket 框架的 Maven 存储库,它包含了构建和运行 Wicket 应用程序所需的各种依赖项。Apache Wicket 是一个用于创建 Web 应用程序的开源 Java 框架,它采用模型-视图-控制器(MVC...
Wicket支持两种页面状态管理方式:状态ful和状态less。状态ful页面保留用户交互的状态,适合需要保持用户信息的场景;状态less页面则不保存状态,每次请求都从服务器获取最新数据,适合高并发和性能要求高的应用。 ...
这个版本可能包括了Wicket框架的源码、API文档、示例程序、库文件等。使用这个版本,开发者可以了解和学习Wicket 6.x系列的特性和使用方法,同时也可以直接在项目中引用这些库文件进行开发。 总结来说,这个压缩包...