Java和Internet
谢俊清 顾冠群
Java是Sun公司于1995年推出的一种全新的面向对象的“Internet编程语言”,目前它正逐步成为一种完整的编程和操作环境。本文首先对Java语言的特点、Java虚拟机(JVM)、Java类文件和Java的应用编程接口框架进行了简要的介绍。然后,本文指出了Java技术在Intranet中的应用前景和方式。
1 前言
——Internet的飞速发展伴随着新技术。新概念和新产品的不断产生,这些新生事物不仅仅是Internet发展需求的产物,也是Internet进行再次飞跃的直接推动力。在Internet的发展史中,WWW、Mosaic和Java的出现是三个具有里程碑性质的事件。Sun公司开发的Java是这三者中影响力最长远,对计算机产业界震撼最大的一种新兴技术。Java独立于具体的计算机平台,体现了面向对象、可移植、安全、简单和分布的特性,在短短一年内就形成了全球的“Java热潮”。现在,对Java的现状和未来的探讨方兴未艾,如火如荼。
——Intranet(内部网)也是一个较新的概念,它通常指企业或部门内部,利用Internet,特别是Web技术构造的供内部工作人员进行信息共享、分布计算的网络环境。Intranet一般通过“防火墙”(Firewall)与Internet相连接,从而使得内部人员可以通过Intranet访问Internet的资源,而外界对Intranet网络资源的访问则受到了一定的限制。由于Intranet技术是一个企业或部门内部计算机互连网络的基础,利用它可以提高产品设计、制造和营销方面的效率和效益,因此,受到了产业界和用户的普遍重视,众多大型软、硬件供应商都提出了自己的Intranet构造和解决方案。随着Java热的升温,Java技术对Intrannet的影响日益增加,使得Intranet的构造、应用和管理方式都发生了相应的变化。
2 Java技术概述
2.1 Java语言环境
——Java的前身是Sun公司针对小型家电进行控制所开发的一种软件,遗憾的是这种软件并未获得商业上的成功,但Sun公司对之不懈的努力和与Web技术的结合,终于使Java应运而生,1995年,Sun公司公布了Java技术规范,得到了众多Web厂商的支持。现在,Java正从一种纯粹的编程语言向由一系列技术和产品组成的完整的编程和操作环境发展,并得到了其它各类厂商(如HP,SGI, Microsoft,Netscape,Cisco等)的支持。
——Java语言的一个重要特性是它的面向对象性。Java语言的开发者们借鉴了以往出现过的面向对象程序设计语言:Eiffel、Smalltalk、Objective-C,特别是C++语言中的概念和特性。Java语言扩充了C++语言中的对象模型,除了Java语言的基本数据类型以外,其它一切都是以对象来表示的。Java语言同时还删除了C++语言的某些复杂的特性,譬如,Java中没有了结构和联合,抛弃了多重继承,不提供运算符重载,取消了指针和内存分配等。由于具备了这样的特点,Java语言应用程序更容易编制和掌握。
——Java语言的可移植性是Java得以风行的主要原因。Java针对不同的硬件平台和操作系统设计开发了相应的Java解释器,这种解释器也称作“Java虚拟机”(JVM)。Java技术规范要求基本数据类型在所有Java虚拟机上的实现是完全一致的,不存在“与实现相关”的部分。于是Java虚拟机屏蔽了具体硬件平台和操作系统的差异,Java应用软件只需要开发一次,它经过Java编译器后生成的字节代码(即Java虚拟机的“机器语言”)可以在任何符合Java规范的Java虚拟机上运行。Java的可移植性使软件的网络传输和发布成为现实,从而将进一步推动“以网络为中心的计算”的发展。
——Java的安全机制使Java更适合于分布的计算环境。由于Java软件可从网络下载运行,对安全性和可靠性的要求相当高,Java通过以下三个方式来解决安全性问题。首先,Java语言取消了C++中指针和内存分配等潜在的不稳定因素而交给Java虚拟机自动完成,这有助于程序员开发安全稳定的程序。其次,在装载字节代码时,字节代码检验器(BCV)将检查是否有操作数栈溢出、非法数据类型转换、参数类型错误等问题,这可以防止对Java字节代码的篡改,还有助于Java虚拟机的全速运行。最后一道防线是类装入器(Class Loader),它将本地类与从不同网络上下载的类置于彼此独立的空间,并对类之间的引用进行严格的审核和控制。
——除了以上三个主要特征以外,Java还通过多线程(Multithread)机制、即时编译和嵌入C代码等方式提高Java应用软件的执行效率。
2.2 Java虚拟机
——Java虚拟机(JVM)是执行Java字节代码的解释器。它建立在具体的硬件平台和操作系统基础之上,用ANSIC语言编写的符合POSIX标准的一个软件系统。目前,Sun公司已经开发了SPARC Solaris,x86 Sloaris,WINDOWS NT/95,MacOS环境下的JVM及其开发环境。
——JVM由四个部分组成:寄存器组(Registers),栈(Stack),碎片收集堆(Garbage-collecting Heap)和方法区(Method Area),形成图1所示的结构。JVM中的地址是32位的,所以其寻址空间可以达到4GB。JVM中共有4个寄存器,pc、optop、frame和vars,每一个寄存器都存放一32位的地址,分别指向存储空间的不同部分。由于方法区存放的是字节代码,因而它是以字节(8bit)为边界的,而在栈和堆中则是以字(32bit)为边界的。
——JVM的栈中存放Java栈帧(Java Stack Frame)。一个栈帧包括三个部分:局部变量、执行环境和操作数栈。分别由vars、frame和optop寄存器指示。它记录了Java程序中当前方法的执行状态。
——JVM中的方法区存放Java程序中方法的字节代码,pc寄存器总是指向方法区中的某个位置,它表示下一条即将执行的字节代码,用于控制方法的执行顺序。
——JVM的碎片收集堆是用来存放对象的,每次在Java程序中用new分配了一个新的对象,JVM将在碎片收集堆中划出一块来存放该对象。当该对象不再被引用时,JVM的碎片回收程序将自动清除这一存储空间。
2.3 Java类文件
——Java源码文件经Java编译器编译后生成的字节代码序列存放在与其源码文件同名,并以“.class”为后缀的类文件中。Java软件是以类文件为单位在网络上传输并在虚拟机上运行的。Java类文件中的各个组成部分按照顺序分别如下:
——①magic数和版本号:magic数为4字节,形式为“OxCAFEBABE”,用于同其它文件格式区别。版本号也为4字节,分为主版本号和次版本号,用于指示所需JVM的版本号,若高于执行所用的JVM,则将拒绝运行。
——②常量池(Constant Pool):常量池中存放与类或界面相关的常量,其中包括类名、界面名、变量名、变量类型、常量值、方法名和方法格式等。常量池是一个变长项的数组,每一常量占用一个项,每一项根据常量类型(由tag标识指示)具有不同的格式。在类文件的其它部分中,常量均由指向常量池的索引(index)值表示,索引值由1开始。
——③访问标识(Access Flags):为2字节,表示类文件的类别及访问权限。
——④本类指针(This Class):为2字节,这2字节指向常量池。Contant-pool[This_class]由两部分组成:第一部分为1字节的标识(tag),其值为CONSTANT_class;第二部分为2字节的索引name_index,Constant_pool[name_index]为一字符串常量,它表示本类的名字。
——⑤超类指针(Super CLass):超类指针与本类指针形式相同,用于指示本类的父类的名字。
——⑥界面(Interface):界面部分的起始2字节表示在该类文件中实现的界面数,随后为一项数等于界面数的数组,数组中每一项表示一个实现的项的信息,它实际上是一指向常量池的索引值,其对应结构与本类指针相同。
——⑦域(Field):域部分的起始2字节表示在该类文件中定义的域的数目,随后为一项数等于域数的数组,数组中每一项表示域的名字、类型和常数值(如果该域为final类型的话)。这些信息中的一部分,如常数值,是存放在常量池中的。
——⑧方法(Method):方法部分的起始2字节表示在该类文件中定义的方法的数目,随后为一项数等于域数的数组,数组中每一项表示方法的描述、方法的局部变量、方法中的例外处理等等。
——⑨特性(Attributes):特性部分是关于此类文件的某些一般信息,其起始2字节为特性数目,其后为具体的特性描述。
——Java类文件的组成结构可以被JVM方便地映射到它的栈、碎片收集堆和方法区中,从而缩短了加载的时间。另外,这样的结构还方便了字节代码校验器的工作。
2.4 Java应用编程接口框架
——Sun公司专门设立Javasoft公司来全权负责有关Java的所有事务。根据市场和其它开发商的要求,1996年5月底,Javasoft公司宣布Java将由一个纯粹的面向对象编程语言发展成为完整的编程和操作环境,该环境的主要组成成分是Java应用编程接口框架(Java API Framework)。它由Java核心API和Java扩展API两大部分组成。Java核心API是Java运行系统的基本集合,将嵌入到JVM中。Java扩展API则包含了面向不同领域和范畴的API接口规范,它们大致包括:
——①Java媒体API(Media API):支持多媒体的处理以及协同工作方式,包括对音频、视频和MIDI的支持(Javasoft、Intel和SGI联合制订),对二维图形的支持(Javasoft与Adobe联合制订),对三维图形的支持(Javasoft、Intel和SGI联合制订),对动画的支持(Javasoft、Intel和MacroMedia联合制订)以及对协同工作的支持(Javasoft制订)等。
——②Java企业API(Enterprise API):支持与企业的工程数据库和遗留系统(Legacy System)的连接,包括JDBC(Java数据库连接),JavaIDL(Java界面描述语言)和JavaRMI(Java远程方法界面)。
——③Java商业API(Commerce API):提供安全的购物和付款机制,包括Java Wallet API、Payment & Service API以及Marchant API。
——④Java安全API(Security API):提供数字签名、加密、鉴别、密钥管理等涉及保密学的功能。
——⑤Java服务应用API(Security API):提供用户构造自己的服务的方式,它允许用户将Java应用小程序上载到网络服务器上,增加或剪裁相应的服务以适应用户环境的需求。
——⑥Java管理API(Management API):提供Internet管理企业内部网的方法和界面,该规范将由Javasoft与BayNetworks、Cisco、CA、Novell和3Com等公司合作制订。
——⑦Java嵌入式API(Embedded API):它是以上所有API的一个子集,主要是加载到小型设备上供用户使用,这些小型设备包括网络计算机(NC)、个人电子助手(PDA)、游戏机、蜂窝电话等。
——Java应用编程接口框架规范的提出和制订进一步扩大了Java的应用范围,使得Java系统在计算机各个领域发挥其可移植、安全、稳定和开发简便的特点,从而给整个计算机产业带来革命性的变化。
3 Java与Intranet
——Java的出现无疑将推动Internet的进一步发展,它有助于通过网络公布和发行应用软件,并使“以网络为中心的计算”成为现实。但是,在最近的一段时期内,Java技术将对IntraneT造成更大的影响,同时,Java技术将在Intranet的使用过程中得到完善和扩充,为最终在Internet上广泛应用打下坚实的基础。Java当前的主要应用领域在Intranet上的原因有以下几点。
——首先,Internet用户数量过于庞大,每个用户可供使用的网络带宽极其有限,Internet的拥塞、延迟现象相当普遍。所以,当前Internet上的主要的Java应用就是用来增加Web页面动感的Java应用小程序(Applet)。但是,由于Java应用软件的功能及界面的日臻完善,其规模也将逐步增大。在这种情况下,Internet的用户从网络下载Java应用软件的时间将变得十分漫长,这对Java应用软件的推广是不利的。然而,Internet的用户主要是一个企业或部门内部的工作人员, Java应用软件在企业内部网络上的传输延迟也可以得到一定程度上的保障。所以,目前大中型Java应用软件的直接受益者首先是Intranet用户。
——其次,Internet用户数量大除了对网络带宽带来不利的影响以外,还对Java应用软件服务器的性能提出了极高的要求。很多Java应用软件都需要建立下载的客户端与服务器端的连接,一个典型的例子就是数据库查询。这样,Java应用软件服务器不仅要满足大量的下载请求,同时还要维护Java服务端进程或线程的正常工作,这对服务器CPU的处理能力、输入输出吞吐量的要求就目前的计算机而言都是很难胜任的。然而,在Intranet中,对应用服务器的要求相对低得多,这有助于Java应用软件在内部网范围内的推广使用。
——最后,由于Internet缺乏统一的管理机构,对于像Java应用软件这样具有动态性和分布性软件的管理、维护和监控将造成很大的困难。另外,尽管Java提供了可靠的安全机制,但面对如此庞大而又开放的Intranet企业和商业用户对Java应用软件所能提供的最终安全程度都有所怀疑。然而在Intranet中,可以有统一的机构和人员对Java应用软件进行监控和维护,再加上Intranet和Internet之间以防火墙相隔,这就进一步提高了Java应用软件的安全性和可靠性。
3.1 Java在Intranet中的应用
——Java应用软件的种类五花八门,不一而足。就其在Intranet中的应用而言,主要可以归纳为下面三类。
——(1)信息共享。早在Web技术产生的初期,利用Web技术进行企业内部信息共享的思想就已经出现了。但是,这样的信息共享是静态的,信息资源的加入、删除和更新都必须依靠Web管理员来完成。尽管此后出现了通用网关接口(CGI)来增加客户和服务器之间的交互能力,但是由于CGI技术自身的限制,信息共享基本上仍旧是静态的。Java的引入是Web技术向动态化的方向迈进了一大步,不仅Web页面的显示变得更加生动,而且下载的Java应用小程序也可以直接与服务端Java程序交互,不必受限于HTTP协议,在一定的安全条件下它甚至可以直接对服务器的信息进行管理维护。这样的特点使得利用Web技术和Java技术实现电子文档管理(EDM)成为可能。
——(2)协同工作。计算机支持的协同工作(CSCW)的研究是当前的一大热点,而群件(Groupware)也在计算机软件产业中占据了重要的一席之地。利用支持协同工作的软件可以提高企业及部门内部的工作效率,从而带来更高的经济效益。Java所提供的多点投递以及它对多媒体(音频、视频等)的支持对于像桌面计算机会议系统这样的协同工作软件的研制开发是十分有益的。另外,客户端的软件不必预先安装,只是在需要的时候才从Java应用软件服务器上下载,大大方便了协同工作软件的升级、管理和维护。
——(3)统一管理。Javasoft公司宣布它即将开发Java0S软件,这是一种动态可扩展的操作系统,其实就是直接构筑于微处理器之上的Java虚拟机,因此具有小型和快速的特点。JavaOS将应用于网络计算机、个人数字助手、打印机、游戏机和蜂窝电话等设备中,目前已经得到了Acer、Mitsubishi(三菱)、0racle、Tatung、Toshiba(东芝)和Xerox等公司的支持,JavaOS也有望使用到企业内的生产设备(如数控机床)上,这样在企业内部就形成了统一的Java操作平台,屏蔽了不同硬件设备和控制软件的差异,从企业管理决策级到车间操作级可以通过一致的方式进行管理和控制,这样就提高了企业的生产效率和适应市场的能力。
——综上所述,Java在Intranet中的应用前景是相当诱人的。它将进一步完善“网络计算”的概念和方式,并为在Internet上得到更加广泛和全面的应用作好准备。
3.2 Java的客户机/服务器工作模型
——Intranet内的典型工作都是基于“客户机/服务器”模型的,而Intranet中要求以Web浏览器作为统一的客户端来访问各种服务器所提供的服务,Java技术是达到这一要求的关键技术之一。
——在Java技术出现以前,Web浏览器访问其它应用服务器(如对数据库的查询)都是以通用网关接口(CGI)的方式来实现的。CGI的工作过程是:用户首先填写表格(Form),然后将这些输入信息捆扎到HTTP协议中传送到Web服务器,Web服务器通过CGI的方式把输入信息交给具体的应用服务器软件进行处理,最后,返回结果以HTML文件的形式从Web服务器返回到Web浏览器,这类似于日常生活中邮寄信件的方式。
——Java技术产生后,利用具有Java解释能力的Web浏览器(Netscape的Navigator或Javasoft的Hotjava)可以将Java应用小程序下载到本地,由Java应用小程序直接与应用服务软件进行交互,这样,首先可以减轻HTTP协议的传输负荷,使它专用于HTML文件的传输;其次,Java应用小程序可以同时与多个应用服务软件之间建立连接,同时接受多个应用服务器的服务,这一点在前一种方式中是无法实现的。此外,Java应用小程序不仅可以获得对应的Java应用服务软件的服务,它也可以通过对象请求代理(ORB)来访问其它的对象服务或者经过IDL包裹的“遗留系统”(Legacy System)的服务。一个典型的实例就是Sunsoft公司采用Java、NEO(一个嵌入Solaris操作系统的符合CORBA规范的对象请求代理系统)和Joe(连接Java应用程序和NEO的产品,其中包括一个供下载到Web浏览器上的Java应用实现的ORB)的组合形成的统一的Intranet面向对象的分布式处理环境的解决方案。在这种方式下,客户请求的处理过程如图2所示。
4 结束语
——Java作为一种全新的面向对象的“网络编程语言”,它的可移植性、安全性和可靠性使它可以在分布式计算环境下得到广泛的运用。Java与CORBA的结合,将使Web浏览器作为Intranet的统一的接入界面,对Intranet上所有的服务进行访问。采用这种方式构成的Intranet网络具有使用简单。维护方便和升级快速等特点,还可以无缝地与Internet进行互连,Internet上的Web客户也可以享有某些Intranet网络上的应用服务。这种方式不仅有助于企业或部门内部工作人员进行信息共享。协同工作,而且可以使企业及时通过Internet向客户公布最新动态并得到客户的反馈信息,它对提高企业自身的工作效率和快速适应市场的需求都是相当有益的。
——Java一方面将推动Intranet的发展,另一方面又通过不断的完善和优化,为最终在Internet广泛运用奠定坚实的基础。