免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1064 | 回复: 0
打印 上一主题 下一主题

使用 Struts Validator-之二 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-06 15:44 |只看该作者 |倒序浏览

构建带有验证的 “防弹” 应用程序
验证的重要性
伟大的篮球队经常因为他们有稳定的控球、精彩的传球、挡不住的投篮而受到赞扬。伟大的音乐家要反复地练习,而且会在一两个音阶或小节上花费数小时的时间。伟大的汽车有许多额外的特性,但是跑得更远,引擎问题更少,而比它们弱小的竞争对手更可靠。所有这些例子都表明,伟大的执行者 “做小事”。这些小事可能不明显,但是会带来一致而积极的结果。
对于应用程序编程,花里胡哨的用户界面和没有必要的复杂的线程,在保证用户数据正确方面,可不如对用户的冲击那样大。没有什么比在 Web 表单中输入错误的电子邮件地址、电话号码,还要让应用程序傻乎乎地继续执行更糟的了。在这类情况下,真正能够有帮助的小事就是验证
简而言之,验证就是确保数据正确。这听起来有点傻,但是正确 可能有各种不同的含义,这也正是验证发挥威力的地方。一个正确的电子邮件地址可能只是拥有至少一个 @ 符号,在 @ 符号后有一个句点(.)。但是,更复杂的应用程序可能还要求电子邮件地址是指定长度、来自少数特定域。在任何一种情况下,代码都必须保证输入的数据是可以接受的;否则,就会产生各种可能的错误情况:

  • 可能把错误的数据传递到另一个方法,后一个方法不得不执行额外的错误检查,从而降低应用程序的速度。
  • 可能把错误的数据传递给一个 执行错误检测的方法,从而造成应用程序崩溃。
  • 可能把错误的数据插入数据库,从而造成下次(可能是 5 分钟或者 5 天以后)读取数据时的错误。

在所有这些情况中,都将给用户带来损害,并给他们提供了转到竞争对手 Web 站点或产品的好理由。
本教程的主题是验证。保证不是什么令人兴奋的、迷人的主题,但是它是可以让好应用程序变成优秀的那些 “小事” 中的一件。


回页首
从服务器端验证开始
在 Struts 这样的服务器端编程环境中,最容易的(在某种程度上,也是最自然的)验证方式就是在 Java 代码中放几个检测。具体来说,用于从表单接收数据的 Struts Action 似乎是放置验证代码的好地方。可以从 servlet 请求中提取值,并检查电子邮件或电话号码的格式、名称的长度或者邮编的合法性。然后,如果有问题,可以再次向用户显示提交表单,可能还带有错误消息,指出发生的问题。
虽然这可能现在听起来不错,但是执行服务器端验证是获得良好用户体验的最糟方式之一。当用户在 Web 表单上点击 SubmitSaveEnter ,并且页面闪烁时(表明服务器上正在发生什么),他们可不想再次回到原来的提交页面,还带着错误消息。如果需要花很长时间来处理请求,那么这个问题就是复杂的:用户必须等待,然后应用程序返回一组错误消息。Web 是种步伐很快的媒体,用户期望最小延迟、响应快的应用程序以及动态的用户界面。
如果不在服务器上处理错误,则应当试着把验证移到客户机。客户端验证可以防止用户提交包含错误数据的表单。因为没有通信的延迟,所以它也更快。现在,好的应用程序中几乎或多或少都有一些客户端验证。
但是,也有些时候服务器端验证 —— 或者至少某种形式的服务器端验证 —— 是有意义的。有时验证包含格式、长度和其他细小问题的检查(想想电话号码、邮编、区号和其他数据);其他时候,验证要调用更复杂的计算。比如,可能需要确保某本书可以运送到某个邮编的地区。在这些情况下,可能不得不允许服务器请求,因为可能需要数据库和其他复杂处理才能保证正确的响应。但是,用户一般能够理解这些是更复杂的请求,所以一般会耐心等待响应。实际上,这类计算很少被当作验证,而是和应用程序服务的通用业务混在一起。同样,除了这些最复杂的情况之外,只要有可能,都应当把验证移到客户机。


回页首
移到 JavaScript 进行验证
客户端验证最明显的选择就是 JavaScript。这个流行的脚本语言易于学习、灵活,而且在每个现代 Web 浏览器中都可用(虽然会有所差别)。对于许多应用程序来说,JavaScript 足够好了。但是,仍然有些不足。
首先,JavaScript 仍然是代码,所以就像其他代码一样,必须编写、测试、调试和部署 JavaScript。如果从 5 位邮编转到 9 位邮编,那么验证代码就要改变,而且需要在它们影响的所有页面上测试修改。虽然这项工作对于得到清爽的、让用户高兴的结果来说很值得,但却是一项时间密集型工作。
在使用 JavaScript 时,也会非常麻烦 —— 可以容易地把 scriplet 放进 HTML 页面,但是会给维护带来恶梦。虽然进行限制并不太难,但是有种诱惑就是只对页面内的脚本做 “一次快速修正”,却从来不删除这段脚本并重写 JavaScript 库中的代码。
最后,可能必须要一个项目一个项目都带着 JavaScript 库。这也不算什么大麻烦,但是个问题 —— 对于部署代码的每个平台都要测试该代码。
请不要误解我 —— JavaScript 是验证的优秀解决方案,但是如果用 Struts,那么还会有第三个 —— 甚至更好的选项。


回页首
了解 Struts Validator
Struts 提供了一个名为 Validator 的优秀组件。Validator 可以插入 Struts 应用程序(将在
安装 Validator 框架
中介绍),甚至直接和最新的 Struts 发行版绑定在一起。只要几个 JAR 文件就可以了。但是 Validator 强在什么地方呢?为什么要用它代替 JavaScript 呢?
而且,您应当认识到,Validator 的大部分执行都使用 JavaScript。所以实际上并没有离开 JavaScript,而且得到的客户端验证也是 JavaScript 擅长的内容。但是,Validator 消除了 JavaScript 的许多问题。首先,它是由成千上万的 Struts 开发人员和用户编码、测试和调试过的,因此降低了您需要进行的测试数量。(我绝对不是 暗示您不要测试;Validator 只是降低了测试负担,但并没有完全消除它。)另外,Validator 提供了大量常用验证函数,所以您不必为电子邮件地址、电话号码、邮编以及其他常用数据编写验证器。这棒不棒?
而最重要的,可能是 Struts Validator 主要通过配置文件工作,而不用内联的 HTML 代码。通过简单的 XML 文件,可以指示要验证哪个字段,要执行哪类验证。Struts 和 Validator 负责把配置变成工作的 JavaScript 代码,您这一边不需要做任何额外工作!虽然偶尔也要为特定于应用程序的数据添加新的验证函数,但是在 HTML 中使用这些函数的工作由 Struts 处理 —— 不需要手工过程。这就是 Validator 真正胜出而珍贵的地方。被说服了么?现在来看它。
待续……


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16590/showart_96065.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP