友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

Java编程思想第4版[中文版](PDF格式)-第19部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


Web 浏览器可获得更充分的利用,并可有效改善Web 服务器的交互(互动)能力。  

对客户端编程的讨论与常规编程问题的讨论并没有太大的区别。采用的参数肯定是相同的,只是运行的平台 

不同:Web 浏览器就象一个有限的操作系统。无论如何,我们仍然需要编程,仍然会在客户端编程中遇到大 

量问题,同时也有很多解决的方案。在本节剩下的部分里,我们将对这些问题进行一番概括,并介绍在客户 

端编程中采取的对策。  

  

1。 插件  

朝客户端编程迈进的时候,最重要的一个问题就是插件的设计。利用插件,程序员可以方便地为浏览器添加 

新功能,用户只需下载一些代码,把它们“插入”浏览器的适当位置即可。这些代码的作用是告诉浏览器 

 “从现在开始,你可以进行这些新活动了”(仅需下载这些插入一次)。有些快速和功能强大的行为是通过 

插件添加到浏览器的。但插件的编写并不是一件简单的任务。在我们构建一个特定的站点时,可能并不希望 

涉及这方面的工作。对客户端程序设计来说,插件的价值在于它允许专业程序员设计出一种新的语言,并将 

那种语言添加到浏览器,同时不必经过浏览器原创者的许可。由此可以看出,插件实际是浏览器的一个“后 

门”,允许创建新的客户端程序设计语言(尽管并非所有语言都是作为插件实现的)。  

  

2。 脚本编制语言  

插件造成了脚本编制语言的爆炸性增长。通过这种脚本语言,可将用于自己客户端程序的源码直接插入 HTML 

页,而对那种语言进行解释的插件会在 HTML 页显示的时候自动激活。脚本语言一般都倾向于尽量简化,易于 

理解。而且由于它们是从属于HTML 页的一些简单正文,所以只需向服务器发出对那个页的一次请求,即可非 

常快地载入。缺点是我们的代码全部暴露在人们面前。另一方面,由于通常不用脚本编制语言做过份复杂的 

事情,所以这个问题暂且可以放在一边。  

脚本语言真正面向的是特定类型问题的解决,其中主要涉及如何创建更丰富、更具有互动能力的图形用户界 

面(GUI)。然而,脚本语言也许能解决客户端编程中 80%的问题。你碰到的问题可能完全就在那80%里 

面。而且由于脚本编制语言的宗旨是尽可能地简化与快速,所以在考虑其他更复杂的方案之前(如Java 及 

ActiveX),首先应想一下脚本语言是否可行。  

目前讨论得最多的脚本编制语言包括JavaScript (它与Java 没有任何关系;之所以叫那个名字,完全是一 

种市场策略)、VBScript (同Visual Basic 很相似)以及Tcl/Tk (来源于流行的跨平台GUI 构造语言)。 

当然还有其他许多语言,也有许多正在开发中。  

JavaScript 也许是目常用的,它得到的支持也最全面。无论NetscapeNavigator,Microsoft Internet  

Explorer ,还是 Opera,目前都提供了对JavaScript 的支持。除此以外,市面上讲述JavaScript 的书籍也 

要比讲述其他语言的书多得多。有些工具还能利用 JavaScript 自动产生网页。当然,如果你已经有Visual  

Basic 或者Tcl/Tk 的深厚功底,当然用它们要简单得多,起码可以避免学习新语言的烦恼(解决Web 方面的 

问题就已经够让人头痛了)。  

  

3。 Java  

如果说一种脚本编制语言能解决80%的客户端程序设计问题,那么剩下的20%又该怎么办呢?它们属于一些 

高难度的问题吗?目前最流行的方案就是Java 。它不仅是一种功能强大、高度安全、可以跨平台使用以及国 

际通用的程序设计语言,也是一种具有旺盛生命力的语言。对 Java 的扩展是不断进行的,提供的语言特性和 



                                                                   39 


…………………………………………………………Page 41……………………………………………………………

库能够很好地解决传统语言不能解决的问题,比如多线程操作、数据库访问、连网程序设计以及分布式计算 

等等。Java 通过“程序片”(Applet)巧妙地解决了客户端编程的问题。  

程序片(或“小应用程序”)是一种非常小的程序,只能在Web 浏览器中运行。作为Web 页的一部分,程序 

片代码会自动下载回来(这和网页中的图片差不多)。激活程序片后,它会执行一个程序。程序片的一个优 

点体现在:通过程序片,一旦用户需要客户软件,软件就可从服务器自动下载回来。它们能自动取得客户软 

件的最新版本,不会出错,也没有重新安装的麻烦。由于 Java 的设计原理,程序员只需要创建程序的一个版 

本,那个程序能在几乎所有计算机以及安装了 Java 解释器的浏览器中运行。由于 Java 是一种全功能的编程 

语言,所以在向服务器发出一个请求之前,我们能先在客户端做完尽可能多的工作。例如,再也不必通过因 

特网传送一个请求表单,再由服务器确定其中是否存在一个拼写或者其他参数错误。大多数数据校验工作均 

可在客户端完成,没有必要坐在计算机前面焦急地等待服务器的响应。这样一来,不仅速度和响应的灵敏度 

得到了极大的提高,对网络和服务器造成的负担也可以明显减轻,这对保障因特网的畅通是至关重要的。  

与脚本程序相比,Java 程序片的另一个优点是它采用编译好的形式,所以客户端看不到源码。当然在另一方 

面,反编译 Java 程序片也并不是件难事,而且代码的隐藏一般并不是个重要的问题。大家要注意另外两个重 

要的问题。正如本书以前会讲到的那样,编译好的 Java 程序片可能包含了许多模块,所以要多次“命中” 

 (访问)服务器以便下载(在Java 1。1 中,这个问题得到了有效的改善——利用Java 压缩档,即 JAR 文 

件——它允许设计者将所有必要的模块都封装到一起,供用户统一下载)。在另一方面,脚本程序是作为 

Web 页正文的一部分集成到 Web 页内的。这种程序一般都非常小,可有效减少对服务器的点击数。另一个因 

素是学习方面的问题。不管你平时听别人怎么说,Java 都不是一种十分容易便可学会的语言。如果你以前是 

一名Visual Basic 程序员,那么转向 VBScript 会是一种最快捷的方案。由于 VBScript 可以解决大多数典型 

的客户机/服务器问题,所以一旦上手,就很难下定决心再去学习 Java 。如果对脚本编制语言比较熟,那么 

在转向 Java 之前,建议先熟悉一下 JavaScript 或者VBScript ,因为它们可能已经能够满足你的需要,不必 

经历学习Java 的艰苦过程。  

  

4。 ActiveX  

在某种程度上,Java 的一个有力竞争对手应该是微软的ActiveX,尽管它采用的是完全不同的一套实现机 

制。ActiveX 最早是一种纯Windows 的方案。经过一家独立的专业协会的努力,ActiveX 现在已具备了跨平台 

使用的能力。实际上,ActiveX 的意思是“假如你的程序同它的工作环境正常连接,它就能进入Web 页,并 

在支持ActiveX 的浏览器中运行”(IE 固化了对ActiveX 的支持,而Netscape 需要一个插件)。所以, 

ActiveX 并没有限制我们使用一种特定的语言。比如,假设我们已经是一名有经验的Windows 程序员,能熟 

练地使用象 C++、Visual Basic 或者BorlandDelphi 那样的语言,就能几乎不加任何学习地创建出 ActiveX 

组件。事实上,ActiveX 是在我们的 Web 页中使用“历史遗留”代码的最佳途径。  

  

5。 安全  

自动下载和通过因特网运行程序听起来就象是一个病毒制造者的梦想。在客户端的编程中,ActiveX 带来了 

最让人头痛的安全问题。点击一个 Web 站点的时候,可能会随同HTML 网页传回任何数量的东西:GIF 文件、 

脚本代码、编译好的Java 代码以及ActiveX 组件。有些是无害的;GIF 文件不会对我们造成任何危害,而脚 

本编制语言通常在自己可做的事情上有着很大的限制。Java 也设计成在一个安全“沙箱”里在它的程序片中 

运行,这样可防止操作位于沙箱以外的磁盘或者内存区域。  

ActiveX 是所有这些里面最让人担心的。用 ActiveX 编写程序就象编制 Windows 应用程序——可以做自己想 

做的任何事情。下载回一个ActiveX 组件后,它完全可能对我们磁盘上的文件造成破坏。当然,对那些下载 

回来并不限于在Web 浏览器内部运行的程序,它们同样也可能破坏我们的系统。从 BBS 下载回来的病毒一直 

是个大问题,但因特网的速度使得这个问题变得更加复杂。  

目前解决的办法是“数字签名”,代码会得到权威机构的验证,显示出它的作者是谁。这一机制的基础是认 

为病毒之所以会传播,是由于它的编制者匿名的缘故。所以假如去掉了匿名的因素,所有设计者都不得不为 

它们的行为负责。这似乎是一个很好的主意,因为它使程序显得更加正规。但我对它能消除恶意因素持怀疑 

态度,因为假如一个程序便含有Bug,那么同样会造成问题。  

Java 通过“沙箱”来防止这些问题的发生。Java 解释器内嵌于我们本地的Web 浏览器中,在程序片装载时会 

检查所有有嫌疑的指令。特别地,程序片根本没有权力将文件写进磁盘,或者删除文件(这是病毒最喜欢做 

的事情之一)。我们通常认为程序片是安全的。而且由于安全对于营建一套可靠的客户机/服务器系统至关 

重要,所以会给病毒留下漏洞的所有错误都能很快得到修复(浏览器软件实际需要强行遵守这些安全规则; 

而有些浏览器则允许我们选择不同的安全级别,防止对系统不同程度的访问)。  

大家或许会怀疑这种限制是否会妨碍我们将文件写到本地磁盘。比如,我们有时需要构建一个本地数据库, 



                                                                 40 


…………………………………………………………Page 42……………………………………………………………

或将数据保存下来,以便日后离线使用。最早的版本似乎每个人都能在线做任何敏感的事情,但这很快就变 

得非常不现实(尽管低价“互联网工具”有一天可能会满足大多数用户的需要)。解决的方案是“签了名的 

程序片”,它用公共密钥加密算法验证程序片确实来自它所声称的地方。当然在通过验证后,签了名的一个 

程序片仍然可以开始清除你的磁盘。但从理论上说,既然现在能够找到创建人“算帐”,他们一般不会干这 

种蠢事。Java 1。1 为数字签名提供了一个框架,在必要时,可让一个程序片“走”到沙箱的外面来。  

数字签名遗漏了一个重要的问题,那就是人们在因特网上移动的速度。如下载回一个错误百出的程序,而它 

很不幸地真的干了某些蠢事,需要多久的时间才能发觉这一点呢?这也许是几天,也可能几周之后。发现了 

之后,又如何追踪当初肇事的程序呢(以及它当时的责任有多大)?  

  

6。 因特网和内联网  

Web 是解决客户机/服务器问题的一种常用方案,所以最好能用相同的技术解决此类问题的一些“子集”, 

特别是公司内部的传统客户机/服务器问题。对于传统的客户机/服务器模式,我们面临的问题是拥有多种 

不同类型的客户计算机,而且很难安装新的客户软件。但通过 Web 浏览器和客户端编程,这两类问题都可得 

到很好的解决。若一个信息网络局限于一家特定的公司,那么在将Web 技术应用于它之后,即可称其为“内 

联网”(Intranet),以示与国际性的“因特网”(Internet )有别。内联网提供了比因特网更大的安全级 

别,因为可以物理性地控制对公司内部服务器的使用。说到培训,一般只要人们理解了浏览器的常规概念, 

就可以非常轻松地掌握网页和程序片之间的差异,所以学习新型系统的开销会大幅度减少。  

安全问题将我们引入客户端编程领域一个似乎是自动形成的分支。若程序是在因特网上运行,由于无从知晓 

它会在什么平台上运行,所以编程时要特别留意,防范可能出现的编程错误。需作一些跨平台处理,以及适 

当的安全防范,比如采用某种脚本语言或者Java 。  

但假如在内联网中运行,面临的一些制约因素就会发生变化。全部机器均为 Intel/Windows 平台是件很平常 

的事情。在内联网中,需要对自己代码的质量负责。而且一旦发现错误,就可以马上改正。除此以外,可能 

已经有了一些“历史遗留”的代码,并用较传统的客户机/服务器方式使用那些代码。但在进行升级时,每 

次都要物理性地安装一道客户程序。浪费在升级安装上的时间是转移到浏览器的一项重要原因。使用了浏览 

器后,升级就变得易如反掌,而且整个过程是透明和自动进行的。如果真的是牵涉到这样的一个内联网中, 

最明智的方法是采用ActiveX,而非试图采用一种新的语言来改写程序代码。  

面临客户端编程问题令人困惑的一系列解决方案时,最好的方案是先做一次投资/回报分析。请总结出问题 

的全部制约因素,以及什么才是最快的方案。由于客户端程序设计仍然要编程,所以无论如何都该针对自己 

的特定情况采取最好的开发途径。这是准备面对程序开发中一些不可避免的问题时,我们可以作出的最佳姿 

态。  



1。11。3 服务器端编程  



我们的整个讨论都忽略了服务器端编程的问题。如果向服务器发出一个请求,会发生什么事情?大多数时候 

的请求都是很简单的一个“把这个文件发给我”。浏览器随后会按适当的形式解释这个文件:作为HTML 页、 

一幅图、一个Java 程序片、一个脚本程序等等。向服务器发出的较复杂的请求通常涉及到对一个数据库进行 

操作(事务处理)。其中最常见的就是发出一个数据库检索命令,得到结果后,服务器会把它格式化成HTML 

页,并作为结果传回来(当然,假如客户通过 Java 或者某种脚本语言具有了更高的智能,那么原始数据就能 

在客户端发送和格式化;这样做速度可以更快,也能减轻服务器的负担)。另外,有时需要在数据库中注册 

自己的名字(比如加入一个组时),或者向服务器发出一份订单,这就涉及到对那个数据库的修改。这类服 

务器请求必须通过服务器端的一些代码进行,我们称其为“服务器端的编程”。在传统意义上,服务器端编 

程是用 Perl 和 CGI 脚本进行的,但更复杂的系统已经出现。其中包括基于Java 的Web 服务器,它允许我们 

用Java 进行所有服务器端编程,写出的程序就叫作“小服务程序”(Servlet)。  



1。11。4 一个独立的领域:应用程序  

返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!