java

位置:IT落伍者 >> java >> 浏览文章

再谈客户端的 Java 技术


发布日期:2023年08月23日
 
再谈客户端的 Java 技术

在过去的几年中Java 平台技术取得了一些惊人进展但这项技术在某些方面的广泛应用和它最初的设计目标完全不同Java 平台技术最初是希望通过客户端运行 Applet 和 application来给网页增加交互性而现在该技术最常见的用途却是基于服务器的 JEE 系统为了让 Java 平台在客户端发挥它的最大潜力人们开发了许多新技术由于企业系统逐渐被互联网应用程序所取代掌握这些新技术也就非常必要在这篇文章中你可以看到如何利用新旧技术来达到此目的

Applet 遇到什么问题?

当 Java 平台首次发布的时候就预示着一种新方法能够将互联网从静态的简单网页集合提升到具有交互性的高级层次Java 创始者的最初目的是为开发者们提供一些方法创建可以在任何客户端机器上运行的小程序这些程序还能够将客户端进程与服务端数据相结合给客户提供高度的交互体验

然而在某些地方Java 为客户端所承诺的许多特性得不到实现导致这个不幸的可能原因包括以下几种

公司防火墙通常阻止 Java Applet 的通过

许多客户端没有提供完全兼容的 Java 虚拟机

安全设置不允许使用 Applet 来执行很多有用的规则

浏览页面时下载一个完整用户界面所需的开销常常令许多用户对 Java Applet 望而却步

必须为不同系统以及不同的平台重新实现许多用户界面函数(打印文件管理和其他一些类似任务)这也是许多开发人员避免使用 Java Applet 的原因

随着互联网上电子商务的成长终端用户的处理能力有所增加对通讯带宽的需求更是迅猛增长在客户端组件中使用 Java 技术再度成为一件很有诱惑力的事情然而我们需要研究一种新方法既能够利用客户端的程序又不必遇到类似于使用 Java Applet 制作 adware 和滚动新闻栏时所面临的障碍通过新旧技术的结合使用甚至融合某些几乎被快速奔跑的互联网时代所淡忘的旧技术就能够减轻这些问题

人们为什么称之为JavaScript

在客户端使用 Java 技术时最为忽略的一点便是 Java Applet 和 JavaScript 之间的结合JavaScript 标准早就为脚本提供了调用 Applet 类的方法而 Applet 也能够调用脚本的函数这种结合让我们能够发挥这两种技术的最大长处我们开发并保持所需要的功能性而将用户界面的设计交给网页开发人员来处理此外利用这种结合还能够增加用户与服务器的交互程度却留下很少客户端参与的痕迹

JavaScript 标准中的 LiveConnect 技术(参看资料部分)允许在网页中使用脚本来调用 Applet 方法只要简单地创建所需要的 Java 类并允许 JavaScript 脚本的开发者访问这个类中的方法便可而 scapeJSObject 类则使我们能够访问 JavaScript 函数和对象这就提供了一种在 Java 代码中调用 JavaScript 函数的方式直接令网页发生相当有趣和重要的变化有了 JavaScript 和 Java Applet 之间的联系那些 JavaScript 或 Java Applet 无法单独执行但结合这二种方法却能完成的任务就能够被解决而且此二者的结合通常还能够减少网页提交到服务器的时间从而减少了用户等待时间服务器处理时间以及服务端的会话状态维护开销考虑下列例子

在用户填表的同时后台线程使用 Java Applet 来在服务端数据库中寻找地址或电话号码信息

当 SSL 不适合使用时利用 PKI 技术来为系统间的通讯加密

使用 DSA 标准来对请求签名为消息内容和发送者提供强大的确认功能

使用 Java Applet 向服务器数据库提交日程改变并在客户端的背景上更新本地日程显示不需要不断对所有日程做更新并且最大程度地缩短这个改动生效所需的时间

结合使用 Java Applet 和 JavaScript 代码进行动态显示不断更新浏览器文档中的内容这种结合允许我们不必为每个所想象得到的客户端平台都写一段打印例程也能够将内容打印出来

清单 阐述如何使用 JSObject 和 LiveConnect 来验证一个电话号码同时将该号码转化成标准格式注意到这只是一个例子代码所以我在服务器连接方法中略去若干必须的函数调用以便简化这个清单这个例子是当电话号码输入框内容发生变化时在 JavaScript 中调用 Java Applet 函数于是 Java Applet 就访问服务器获得这个电话号码的标准格式字符串并将该字符串返回到隐藏框(hidden field)里真正实现此任务的代码应该用后台线程来实现服务器连接和电话号码验证以便让验证过程对用户而言是透明的这个例子还使用了另一项使客户端 Java 编程更为有趣的技术HTTP 连接以及与服务器代码(特别是 servlet 和 JSP 网页)的结合

基于服务器的资源

那些必须存放在服务器上的资源会怎样呢?这类基于服务器的资源包括地址验证运输费用计算以及信用卡验证等支持数据以及要求高安全度的处理必须放在服务端但大部分的验证处理数据转换以及费用计算过程可以迁移到客户端系统上支持这一想法的几个 Java 语言特点包括

Java 语言通过 HttpURLConnection 对象来为 HTTP 连接提供内在支持同时利用 包的其他部分为服务端代码与客户端代码之间的通讯提供一种方法简单有效地生成数据或打包数据

许多客户端的 Java Applet 代码实际上与那些在服务器上运行的代码是一样的

现在我们可以将多种任务分配给服务器和客户机从而减少服务器负载甚至可能减少网络连接具体如何分配这些任务将取决于系统的类型以及用户团体但几乎所有的系统都会因为增加一些客户端处理而受益例如

Applet 类能够将数据从一系列格式转化到单一的 XML 字符串格式这使得服务器更容易处理数据

Applet 类可以进行数据压缩即把那些将要上载到服务器的数据压缩同时将这些数据分割成较小的数据包从而进一步提高了可靠性

当用户填写结帐表单时Applet 类能够进行地址和运输费用的计算(在更大的基于服务器数据库中这类计算常常需要进行交互)此方法能够减少最后结算所需要的时间同时令用户在提交定单之前就能够看到正确的运输费用以及相应税金等信息

为了发挥这个技术的最大优势需要一些方法向那些返回指定数据的服务器发送请求 Java servlet 恰好具有这种能力许多开发者并未完全意识到 servlet 能够将任何一种数据作为响应并返回而不仅仅限于 HTML 或是 XML通过返回一系列连续的对象或一个压缩的数据包servlet 能够执行例如地址确认或运输费用和税金计算等任务同时进行这些计算的客户端代码可以通过后台线程的运行来掩盖用户等待时间清单 中显示了一个servlet该 servlet 接收 HTTP 的带有 Zip 代码的 GET 请求并返回运输费用的计算结果同样出于令清单清晰明了的目的在这里省略了若干非常重要的实际代码

注意到我使用 ObjectOutputStream 对象来将整个目标图表写入待返回的响应中content 类型需要设置成某些合适的值同时将 content 处理句柄分配到客户端这种方法能够返回一个 Java 对象里面包含顾客运输处理费用以及应缴税金的计算结果如果这个对象只是与客户端后台线程进行通讯用户就根本不会意识到他已经和服务器进行了一轮通讯

节约时间的新技术

上述技术都已实现若干时间了且大多数正在全世界各种不同的系统上应用着前面我曾经许诺过要介绍一些新技术现在是具体阐述它们的时候了客户端上最有趣的 Java 新技术当属 webletIBM alphaWorks 的 DirectDOM 就是该技术的一个具体实现(参看资料部分)DirectDOM 允许从 Java 代码中访问整个浏览器 DOM tree (日 WC 建议为 DOM Level )weblet 没有用户界面必须通过操纵浏览器中的活动 DOM 文档来完成它的工作许多原先需要复杂 JavaScript 代码才能实现的技术通过这种方法都能够实现必须注意到尽管 DirectDOM 是一项很有吸引力的技术它仍处在 alpha 阶段是不完善的并且需要 Internet Explorer 或 Mozilla (M) 的最新版本才能够运行然而此技术足以使你预测到不远的将来将会如何令人激动一些可能实现的例子如下

在充满了大量图形和视觉刺激的结算网页上加入 weblet那么在用户处理结算表格的多个步骤时不需要每步都在表单与网页间切换也能够与服务器通讯交换数据并完成结算当结算完毕需要确认时weblet 会将整个包提交到服务器服务器就可以按照通常的结算处理步骤进行处理

一个显示属性消息的网页weblet 通过令页面空白来标记对应于打印或保存请求的响应从而防止数据被不加区别地共享

用户可以向互联网上的应用程序请求获得某些报告报告的摘要信息会马上传送到而 weblet 则使用后台线程下载该报告的详细信息当用户对摘要中某行条目感兴趣时只要用鼠标点击该条目weblet 就能够立即响应鼠标动作在这个条目的下方显示详细信息这些具体信息是在摘要页面下载后才被后台线程下载的但是用户并不会注意到这一点

另一个长些的例子更清楚地展示了 weblet 如何工作在 清单 发送给客户端的 HTML 页面和 清单 weblet 类的 Java 代码中可以看到这个例子尽管它不适合于生产环境也未完善但依然很有用这个例子下载一个很长的示范网页其中含有两个表单和一个 weblet 标记weblet 用一些介绍性的文本来替代这些表单或在演示过程中切换这两个表单

上一篇:Java的字串运算符+

下一篇:Java常用的加密 解密 数字签名等API