" Y' H4 W+ N" S8 t2 @ v$ E. O6 B1 C) |) A4 {
当 SSL 不适合使用时,利用 PKI 技术来为系统间的通讯加密。 ; b/ e+ k( Q. E4 E! Z/ ^/ \9 |, Y
r- a' `8 P; N/ l& z: B
# d- M+ ?. ]6 V使用 DSA 标准来对请求签名,为消息内容和发送者提供强大的确认功能。 # ~6 Y" X i, H- p. K( t ! [$ E" F. U$ m7 V. k; u S! y5 n [3 ?: @' X4 ~
使用 Java Applet 向服务器数据库提交日程改变,并在客户端的背景上更新本地日程显示。不需要不断对所有日程做更新,并且最大程度地缩短这个改动生效所需的时间。 ; T8 Z5 w5 j0 x H3 T( i
9 b: h% f( g( t/ z6 h# _ ' @. C3 G X. w* k结合使用 Java Applet 和 JavaScript 代码进行动态显示,不断更新浏览器文档中的内容;这种结合允许我们不必为每个所想象得到的客户端平台都写一段打印例程,也能够将内容打印出来。 5 j8 V# T( g+ J& m- b* q$ \ H- ]清单 1 阐述如何使用 JSObject 和 LiveConnect 来验证一个电话号码,同时将该号码转化成标准格式。注意到这只是一个例子代码,所以我在服务器连接方法中略去若干必须的函数调用,以便简化这个清单。这个例子是当电话号码输入框内容发生变化时,在 JavaScript 中调用 Java Applet 函数。于是 Java Applet 就访问服务器,获得这个电话号码的标准格式字符串,并将该字符串返回到隐藏框(hidden field)里。真正实现此任务的代码,应该用后台线程来实现服务器连接和电话号码验证,以便让验证过程对用户而言是透明的。这个例子还使用了另一项使客户端 Java 编程更为有趣的技术:HTTP 连接以及与服务器代码(特别是 servlet 和 JSP 网页)的结合。 6 v$ X% K5 g4 B) v7 s5 R
. E0 @5 w% z; n: @+ H* @6 @% b0 B
基于服务器的资源 5 }( L" ~/ u- J- E5 C3 l f那些必须存放在服务器上的资源会怎样呢?这类基于服务器的资源包括地址验证,运输费用计算,以及信用卡验证等。支持数据以及要求高安全度的处理必须放在服务端,但大部分的验证处理,数据转换以及费用计算过程可以迁移到客户端系统上。支持这一想法的几个 Java 语言特点包括: ! g, i$ n/ F2 ~9 B' h - _) p* W, G" [) q! z6 LJava 语言通过 HttpURLConnection 对象来为 HTTP 连接提供内在支持。同时利用 java.net 包的其他部分,为服务端代码与客户端代码之间的通讯提供一种方法,简单有效地生成数据或打包数据。 ' s3 R# o* V* ], Y8 c8 H5 s- j! i $ A% W% y7 n. N% m' S; m0 a0 V4 I5 g( p. d3 C% B
许多客户端的 Java Applet 代码实际上与那些在服务器上运行的代码是一样的。 - p8 w5 ?: A" T) u! f
现在我们可以将多种任务分配给服务器和客户机,从而减少服务器负载,甚至可能减少网络连接。具体如何分配这些任务将取决于系统的类型以及用户团体,但几乎所有的系统都会因为增加一些客户端处理而受益,例如: : j- p, c. b* `2 r1 r8 I5 X1 `1 @) X4 L# c5 O0 q
Applet 类能够将数据从一系列格式转化到单一的 XML 字符串格式,这使得服务器更容易处理数据。 " \! r. s! T1 s' o: q7 m; o! {$ S1 O4 w/ p% l5 {6 A+ Q4 j+ D Z
- ^& {2 Y J3 Z+ [, p/ U
Applet 类可以进行数据压缩,即把那些将要上载到服务器的数据压缩,同时将这些数据分割成较小的数据包,从而进一步提高了可靠性。 3 I% j( k4 E0 B- C& a / N2 ~" W0 t) H8 ~4 \% }9 B. _+ O A) J; d' B& C% [
当用户填写结帐表单时,Applet 类能够进行地址和运输费用的计算(在更大的基于服务器数据库中这类计算常常需要进行交互)。此方法能够减少最后结算所需要的时间,同时令用户在提交定单之前就能够看到正确的运输费用以及相应税金等信息。 8 \. e! F: z% O. P6 j, ^0 K# d为了发挥这个技术的最大优势,需要一些方法向那些返回指定数据的服务器发送请求。 Java servlet 恰好具有这种能力。许多开发者并未完全意识到 servlet 能够将任何一种数据作为响应并返回,而不仅仅限于 HTML 或是 XML。通过返回一系列连续的对象或一个压缩的数据包,servlet 能够执行例如地址确认或运输费用和税金计算等任务。同时,进行这些计算的客户端代码可以通过后台线程的运行来掩盖用户等待时间。清单 2 中显示了一个servlet,该 servlet 接收 HTTP 的带有 Zip 代码的 GET 请求,并返回运输费用的计算结果。同样出于令清单清晰明了的目的,在这里省略了若干非常重要的实际代码。 + y$ ?. Y) i6 C, I) h8 y" Z
X* q' O1 P2 c7 j* D注意到我使用 ObjectOutputStream 对象来将整个目标图表写入待返回的响应中。content 类型需要设置成某些合适的值,同时将 content 处理句柄分配到客户端。这种方法能够返回一个 Java 对象,里面包含顾客运输、处理费用以及应缴税金的计算结果。如果这个对象只是与客户端后台线程进行通讯,用户就根本不会意识到他已经和服务器进行了一轮通讯。 6 H# r6 E' C) i2 ~- z! ?" K" t& Q0 x/ A
0 [% S% g# k9 H0 [2 \节约时间的新技术 3 w! r2 @ M1 d+ Q( I2 [上述技术都已实现若干时间了,且大多数正在全世界各种不同的系统上应用着。前面我曾经许诺过要介绍一些新技术,现在是具体阐述它们的时候了。客户端上最有趣的 Java 新技术当属 weblet。IBM alphaWorks 的 DirectDOM 就是该技术的一个具体实现(参看资料部分)。DirectDOM 允许从 Java 代码中访问整个浏览器 DOM tree (2000年11月13日 W3C 建议为 DOM Level 2)。weblet 没有用户界面,必须通过操纵浏览器中的活动 DOM 文档来完成它的工作。许多原先需要复杂 JavaScript 代码才能实现的技术,通过这种方法都能够实现。必须注意到尽管 DirectDOM 是一项很有吸引力的技术,它仍处在 alpha 阶段,是不完善的,并且需要 Internet Explorer 或 Mozilla (M18) 的最新版本才能够运行。然而,此技术足以使你预测到不远的将来将会如何令人激动。一些可能实现的例子如下: & k6 K4 n2 J% b( W# D& J
% S! A7 r" t: w- s p6 P9 B在充满了大量图形和视觉刺激的结算网页上,加入 weblet。那么在用户处理结算表格的多个步骤时,不需要每步都在表单与网页间切换,也能够与服务器通讯交换数据并完成结算。当结算完毕需要确认时,weblet 会将整个包提交到服务器,服务器就可以按照通常的结算处理步骤进行处理。 - Z3 B0 e! G B% l7 S( R2 z
+ S( L1 {& Q4 Y* y$ y