Tapestry 教程(一) 原

介绍

欢迎来到 Tapestry 的世界!

这篇教程帮助人们来创建基于 Tapestry 的 web 应用程序。你是否有过使用 Tapestry 早期版本或者其它 web 框架的经历,这一点并不重要。事实上,从某些立场来看,对于一般的 web 开发了解的越少,你就能学得更好……因为那样你要忘掉的就不太多啦!

你确实对 HTML 有着较好的理解,对 XML 也一知半解,对于基础的 Java 语言特性,包括注解(Annotation)也有一个较好的了解。

Web 开发的挑战

如果你曾经用 servlet 和 JSP,或者利用 Struts 来开发过 web 应用程序,那你应该已经很容易感到有许多的麻烦。如此多的麻烦,你甚至可能没有理解你所在的可怕处境!这里都是些没有安全网络的环境;Struts 和 Servlet API 并不能告诉你应用程序怎么构建法,或者如何把不同的块组合到一起。任何URL都可以是一个action,而任何action都可以被指向任何视图,(使用一个JSP)来向网页浏览器提供一个HTML的响应。麻烦就是你作为一个开发者需要作出的许多细小琐碎,可是又很重要的决定,(还的就这些问题同你团队的其它成员扯来扯去)。对于action、page以及存储在HttpSession或者HttpServletRequest中的attribute,它们的命名约定是什么?在哪儿实现数据库事务、缓存和安全这些东西(还有你是不是还得复制一些Java或者XML来让什么东西能管用)?你的包是如何组织的……用户接口类该放哪儿……数据和实体对象该放哪儿?你如何将一个地方的代码共享给应用程序的其它部分?

最糟糕的是,传统的方法把你最不想碰的问题都扔给了你:多线程编程。记得面向对象编程基础课中一个对象是被定义成一堆数据以及在这些数据上所进行的操作吗?当你要构建一个传统的web应用程序时就这忘掉这一课,因为web应用程序就是多线程的。一台应用程序服务器可以处理数十或者数百个来自个人用户的请求,每一个请求都有属于它们自己的线程,而每一个都用的是相同的对象。突然之间,你就无法在一个对象(一个servlet或者一个Struts Action中)存储数据了,因为不管你为一个用户存的是什么数据,数据都会立即被另外的某个用户覆盖掉。

糟糕的是,你的每个对象都只有一个操作:doGet()或者doPost()。

同时,你的绝大部分日常工作都涉及到决定如何去打包已经存在于一个特定Java对象的某些数据,还有把那些数据折腾到一个URL的查询参数中,那样如果用户点击了特定的链接,你才能写更多的代码来将其转换回去。还有就是不能忘了要编辑一对的XML文件来让servlet容器,或者Struts框架知道你的这些决定。

开发玩笑,基本上在你做出了任何修改之后,都得记得要重新构建,重新部署并重启。有什么令你感到熟悉的吗?那很可能会让你感激一个你并不怎么熟悉东西:Tapestry。

Tapestry 的方式

Tapestry使用了一个非常不同的模型:一个有组织有架构的page,还有page中的组件。每样都有一个(你来指定的)特殊名称。一旦你知道了page的名称,你就知道了对应这个page的Java代码的位置,还有对应这个page的模板的位置,以及整个page的结构。Tapestry也都知道,且能让所有的东西发挥作用

如我们将会在下面的一些page中所看到的,Tapestry让你能在针对你的对象编写代码。除了几个Java注解之外,你将很少会看到任何Tapestry类。如果你要存储什么信息,就把它存储在类的属性域中,而不是HttpServletResponse或者HttpSession中。如果你想要执行什么代码,它就只会是一个简单的注解或者是以使Tapestry会在正确的时间,使用正确的数据调用到的约定来命名的方法。

Tapestry也使你能免受web应用程序开发的大多数多线程问题的困扰。Tapestry以线程安全的方式管理page和组件对象、以及page和组件的属性域的生命周期。你的page和组件对象看起来总像是简单的标准POJO

Tapestry起步于2000年1月,到现在它已经影响了整个Tapestry社区超过15年。Tapestry给table带来了所有有关于构建可扩展、可维护、稳定、国际化的,以及可以使用Ajax的应用程序的最佳方法,这些方面的经验。Tapestry 5基于一个(不同于Tapestry 4的)全新的代码库,在简化Tapestry编码模型的同时扩展Tapestry能力并提升其性能。

获取教程源代码

尽管你可能不会需要。这个教程的源代码都在GitHub上。

是时候开始了

好了,背景说得够多了。现在让我开始教程的学习吧:依赖,工具和插件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WindCoder

简化软件集成:一个Apache Camel教程

本周收到的是一篇关于使用Apache Camel整合企业中各种软件的教程,涉及到从基础到Kubernetes集成。推荐直接看原文:

1K10
来自专栏java一日一条

调查:Java程序员最亲睐的Web框架

只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据。下面是其他开发者所使用web框架列表:

15910
来自专栏ImportSource

Spring 5 新增全新的reactive web框架:webflux

Spring 5发布了一个非常重要的模块,名字叫做:spring-webflux。该模块平级的就是spring-webmvc。 ? 具体能做什么呢?自然是mvc...

1.1K70
来自专栏ThoughtWorks

Keycloak单点登录平台|技术雷达

Keycloak首次在ThoughtWorks技术雷达第16期中以“评估”的状态出现。 技术雷达15期正式提出“安全是每一个人的问题”,同时也对Docker和微...

76130
来自专栏小狼的世界

浅解用PHP实现MVC

传统的面相过程式的开发方式在处理中型以上的应用时,就开始显得力不从心。即便我们能够快速的完成需求,但是在需求发生变更后或者进行后期维护的时候,我们会深深地陷入我...

14430
来自专栏java工会

Spring AOP的最佳实践

27070
来自专栏精讲JAVA

Java面试Spring必备知识点,怼死面试官,从我做起

首先,面试骚红系列已经更新了到第三篇了,更新的两篇文章,可以说,小海遇到了很多问题,第一个问题,发布第二篇,Linux知识点,有人说小编弄得太浅显...

33230
来自专栏linux驱动个人学习

谈乱序执行和内存屏障【转】

10多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的,但随着计算机技术突飞猛进的发展,我们离底层原理越来越远,这并不是一件坏事,但在有些情况下了解一些底层...

18940
来自专栏一个会写诗的程序员的博客

第1章 Spring Boot史前简述小结参考资料

大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。

13040
来自专栏java一日一条

调查:Java程序员最亲睐的Web框架

只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据。下面是其他开发者所使用web框架列表:

17220

扫码关注云+社区

领取腾讯云代金券