今天谈谈.NET与Java,入门语言的选择
.net与java的这种相似为快速开发框架的开发提供了便利,如果您掌握了c#,那么,掌握java这个语言几乎是不费什么力气的,需要花费时间的只不过就是熟悉彼此的类库。.net是.net framework,java是j2se。学习这两者的理论基础都是面向对象理论。所以,一名有着面向对象理论基础的人是很容易掌握.net和java的。
简介
.net是迎接j微软推出的一种新的软件运行平台,它包括一整套应用范围广泛的技术,旨在ava所带来的挑战。.net给快速开发框架开发带来了很多新的技术,尤其是它的“混合语言”开发方式,是第一个支持多种语言混合开发的软件运行平台,下一代windows--longhorn的核心将会看到.net的身影。如果读者学过java,那么您会发现,.net与java实在是太象了。尤其是c#,如果给你一段代码,有的时候还真难分辨出是用java还是c#写的。
java是上世纪九十年代诞生的一种面向对象语言,它吸取了c++的许多长处,其最大的特性是“跨平台”,由于它很好地满足了网络时代信息系统对高级语言的要求,因而在实践中得到广泛应用。java经过近十年的发展,目前已在企业信息系统开发领域占据了主流地位,形成了一整套完整的技术体系,取得了巨大的成功。
平台的构架
java平台包括java语言,以及一套虚拟机——如jvm、kvm、cvm等——通过它们实现在pc机,手提电脑或是嵌入式系统上运行java的字节码。同时,java平台还定义了一整套覆盖面很广的api,它们被用来与微软的api协调或是相互竞争。如jdbc对odbc,jtapi对tapi,jdo对ado等等。因此,简要来说,java平台包括语言,虚拟机,以及api库。由于使用虚拟机机制,所以java语言在所有的平台上只有唯一的版本,因此它使用rmi协议进行远程通信;微软则在.net框架中使用dcom——正在逐步演变为soap。sun最初对java的宣传是“一次性代码编写,所有环境下运行”,但在推出了“j2ee”和“j2me”后不得不收回了它最初的宣传,因为“一种尺码的鞋适合所有的脚”的解决方案并不能很好的工作。
.net框架包括c++, vb.net和c#等一系列语言;与java虚拟机类似的一套运行时环境;以及一套倾向与windows体系的api接口。其中的运行时环境可能存在于一个浏览器、或是一个web server、或是在操作系统中。将来也许在sql server中也可能存在这样的运行时环境。另外需要提及的是微软的soap协议,它在继承了dcom的一些特性的基础上发展起来,基于xml格式通过http进行传输。
加密法:概论
.net的加密法主要基于cryptoapi 和相关扩展。大多数有关加密的类都在system.security.cryptography, x509centificates 和xml中。.net利用基于流的模型来完成加密传输,所有的算法都被默认为最高的安全级别。.net也允许用户自己在 machine.config 中定义自己的算法。java平台的加密算法分二个部分:java cryptography architecture和 java cryptography extension。 jce的出口受到有关法律的限制。如果要使用用户自己的加密算法,必须得到认证机构的认证。
加密法:算法
.net为快速开发框架主要提供了下面几大类加密算法:非对称算法、hash算法、对称算法、随机数生成法。java提供的加密算法更多,但是较少第三方厂商可以在java中提供自己的算法。
安全配置
两个平台的配置都是通过xml或纯文本文件,两个平台最大的区别在于处理安全配置体系的方式不同。在.net平台,有图形接口和命令行二种方式来修改安全配置参数。mscorcfg.msc是图形接口方式,caspol.exe提供了命令行方式,适用于批处理或配置文本。java平台只提供了图形接口的工具policytool.exe。和.net不同的是,它的目标对象(配置文件)的名字和位置不是固定的。.net定义了不同范围的安全配置文件:系统范围,本机范围,本用户范围。在配置有冲突时,原则上小范围的参数有优先权。java和j2ee的核心配置文件都保存在固定位置,但扩展配置文件随厂家不同而不同。
安全通信
ssl已经是事实的传输安全的工业标准了。java和.net都支持最新版本 ssl 3.0。
安全通信:平台
.net只在基于iis的应用中使用ssl来保护http传输,对于非iis应用,.net不能保护传输中的数据。在java中,jsse提供了平台级的服务,保证基于tcp/ip的通信安全。除了iis,.net没有提供任何其它平台级的通信保护的标准方案,但是java在这方面提供了全套的解决方案。
安全通信:应用
.net通过wsa和 wse包来提供最新的web服务安全保证,java目前还没有提供这方面的支持。在加密方法上,java和.net基本没有太大的差别;在通信保护方面,java 比.net提供了更多的选择方案;但是在web服务安全性上,java明显比.net落后一些。
代码封装:检验
java 和.net 的common library runtime都实行内存安全或类型安全的保护机制,在这些平台开发的应用的安全性也是可以检验的。他们的实现机制有很大的不同。在.net, clr总是执行编译好的代码,它不解释代码。但是在中间语言被编译之前,编译器会有验证和检验的步骤。第一步是检查文件的结构和代码完整性;第二步包括一些扩展的检查,内存安全、堆栈跟踪、数据流分析、类型检查等。在运行阶段,由ves来负责安全性检查和出错意外情况处理。在java平台,java虚拟机(jvm)负责类的载入、链接、检验和执行。对于已经编译和优化的代码,jvm也用二个无条件调用堆栈来保留最初的字节代码信息。
代码封装:应用隔离
在.net, 域隔离建立在内存安全机制的基础上,不同的域不能直接访问彼此的地址空间,只能通过.net远程通信机制访问。在java平台,应用隔离是通过classloaders 和 protectiondomains 相结合来实现的,安全类加载是jvm安全机制的基石。.net的 appdomains 就象操作系统的进程一样,使用起来比java的 protectiondomains 更直接、容易一些。
代码封装: 语言特征
两个平台基本上差不多,.net在灵活性上稍微好一点。
发展历程
java最初来源于sun的一套为机顶盒设计的语言,当时的名字是oak,sun将之更名,并将它放在internet上作为开放源码共享。随着专门为网页设计的java applet的出现,java语言迅速在internet上流行起来。当时的浏览器主要是netscape。当微软发现明天市场的主宰可能是浏览器而不是桌面系统时,开始着手对netscape进行收购,在收购计划失败后微软发展了自己的浏览器ie。当时的internet需要一种语言,而java适时的出现了,由于它与c++的许多相似的语法,使得很多程序员转向了java。而它确实具有很多优势,以至于在98年秋,它的反对者微软在msdn中都宣称,java是编写com组件的最佳语言。随着java一起出现的还有linux操作系统和apache服务器。这三者的联合在服务器端的应用表现出强大的威力,以至windows nt在企业级服务器市场受到了很大的冲击。
展望未来
现在,我们能看到到还只是一个很混乱的局面。而在未来,我们将看到.net的成熟,以及它和java的融合。java将继续保持它的特点:跨平台的服务器端应用,如wap服务器,或者是电信领域的如jain,同时它在嵌入式系统中将继续保持它的优势,象智能卡、移动电话、pda等。而我们还将看到.net的成熟,当然这种成熟需要时间,可能是相当长的一段时间,就好象当年java成长那样。
非微软产品,包括服务器,桌面或是便携式设备的操作系统如solaris, linux和palm os的.net接口。与java核心的整合。sql server 或是oracle 等数据库产品中整合的ves 引擎。由中立的第三方开发的开放源码的,完善的.net平台。可以预见到,微软将会赞助一些开放源码的项目,以使.net 向unix 平台扩展,而这将有助于一些开放源码组织减少它们对java的偏爱