专栏首页LeoXu的博客Tapestry 教程(一) 原

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 条评论
登录 后参与评论

相关文章

  • Tapestry 教程(六)使用BeanEditForm来创建用户表单

    在前面一章,我们看到了Tapestry如何处理简单地链接,甚至于处理能在URL中传递信息的链接。在本章,我们将会看到Tapestry如何以不同的方式做同样的事情...

    LeoXu
  • Tapestry 教程(四)探索项目结构 原

    l Web应用程序文件放在 src/main/webapp(包括src/main/webapp/WEB-INF)

    LeoXu
  • 启动 mini-web 报错 java.lang.ClassNotFoundException...

    在学习Springside的实例mini-web的时候遇到了Tomcat报错:

    LeoXu
  • 网络排查工具MTR介绍

    常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络联通性判断工具,它可以结合ping ns...

    苏欣
  • 网站渗透测试对接口功能漏洞测试分析

    首先是渗透接口测试:在安全工程师角度看这就是1个十分好的知识要点积累的方式,不仅有利于你现在每次的网站渗透测试中不遗漏掉某一点,而且还能够在队伍里面开展分享有利...

    网站安全专家
  • 渗透测试服务 多个角度去分析漏洞问题

    首先是渗透接口测试:在安全工程师角度看这就是1个十分好的知识要点积累的方式,不仅有利于你现在每次的网站渗透测试中不遗漏掉某一点,而且还能够在队伍里面开展分享有利...

    技术分享达人
  • 实用!一键生成数据库文档,堪称数据库界的Swagger

    最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台。需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜...

    程序员内点事
  • 实用!一键生成数据库文档,堪称数据库界的Swagger

    最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台。需要梳理各业务线的数据表,但每个业务线库都有近百张和订单相关的表,挨个表一个一个字段的弄脑瓜...

    程序员内点事
  • 深度学习模型复现难?看看这篇句子对模型的复现论文

    本文是COLING 2018的 Best Reproduction Paper,文章对sentence pair modeling进行了比较全面的介绍。

    数据派THU
  • Selenium及Headless Ch

    一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面...

    py3study

扫码关注云+社区

领取腾讯云代金券