Tapestry开发者指南(2)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 10:28:02
第一章 介绍
1.2 互动
我们继续讨论JSP 的部份, 该部分允许从购物车中删除项目。简单起见, 我们假设,类LineItem 有一个名为item的对象, 并且有一个servlet 来操作购物车状况的变动。

<%= item.getProductName() %>
<%= item.getQuantity() %>
<% String URL = response.encodeURL("/servlet/update-cart?action=remove" +
"&item=" + item.getId());
%>
Remove

这清楚地表明, 在JSP 应用中, 设计师在一个非常低的层面上, 负责将页面、servlets 和其它元素"编织到一起"。相反, Tapesrty自动地照顾几乎所有这些问题:

Sample Product
10
Remove

由于Tapestry 使用组件对象模型,框架确切地知道remove组件"在页面什么的地方"。它使用这个信息创建适当的URL来参考remove组件。如果用户点击了这个链接,框架将通知组件进行所需的行动。这样remove组件可以从购物车中去除项目。
实际上, 在Tapestry之下, 用户代码不必编码或解码URL 。这从网络应用中消除整个类的错误 (那些URLs 可能比您认为的更加困难进行汇集和解析!)
Tapestry不仅仅为您对一个servlet创建URL; servlets 的整体概念退出了网络应用。Tapesrty创建URL来调用组件中的一个方法。
Tapestry应用象“超级servlet”,只有这一个servlet 需要配置和部署。相反, 甚至使用Sun的模型2 (servlets 提供控制逻辑, JSPs 提交结果), 来开发的一种简单的JSP应用,都可以容易地产生许多servlet.
1.3 安全
使用Tapestry开发应用可提供一些适当的安全好处。
Tapestry应用建立在Java Servlet API之上, 因此继承所有servlet的安全好处。多数针对CGI程序(譬如那些用Perl 或其它脚本语言写的程序)的安全冲突依靠于松散的代码, 这些代码在系统shell中评估URL 的部份;而在使用Java Servlet API时, 这从来不会发生 。
因为Tapestry 创建的处理客户互动的URLs比传统方式的URLs 具有更强的构造, 几乎没有弱点可利用。不适当地格式化的URLs 导致对用户提交异常回应。
Java Servlet API 的困难是在客户标识, 因为会话标识符被存放于客户, 或作为HTTP Cookie,或被编码到每个URL中。恶意软件能获取这样标识符, 并且"借用" 用户的身分,好象该用户最近刚登录应用。总之, 这是servlet 应用的一个共同的局限。
终于, Tapestry应用具有唯一控制流: 所有进来的请求流要经过特殊类的几个指定方法。这使它更加容易对应用增加其他的安全措施。