1.体系架构的比较
作为彼此竞争的应用平台,J2EE和.NET开发平台在目标和体系结构上极其相似,但在实现上又完全不同。
(1)类似的平台基础构造 J2EE和.NET两个平台在底层的执行引擎都源于托管的虚拟机概念,但.NET的CLR沿着Java虚拟机(JVM)走得更远,CLR在借鉴了JVM的自动垃圾收集、异常处理等机制的同时,又为.NET平台添加了多语言支持、组件自描述等新的特性。
在.NET和 J2EE平台上,程序的编译都经过两个类似的过程。首先,特定高级语言编译器将C#(及其他.NET语言)和Java源代码分别翻译成中间语言(IL)和字节代码(ByteCode)。.NET在中间语言设计时通盘考虑了多个主流高级语言,在这一层面实现了.NET平台的跨语言承诺;J2EE的基石是Java语言,它最典型的特征是:一次编写,多次运行。跨平台是J2EE一直引以为豪的关键,这是通过JVM来实现的。
其次,在执行时,中间语言被即时编译器(JIT)编译成特定平台的二进制代码,字节代码则通过JVM解释执行,完成各自语言的指令功能。鉴于微软在“Wintel平台”上的代码优化功底,.N
ET代码的执行速度较之于Java有明显的优势是不争的事实。但在Unix/Linux平台上,由于.NET迟迟未能实现其跨平台的承诺,J2EE几乎成了惟一的选择,执行效率的比较也就无所谓。在代码执行的同时,通用语言运行时和Java虚拟机也都提出了异常捕捉、类型安全、内存分配和垃圾收集等自动化内存管理工作,大大减轻少了现代软件的内存泄漏问题,减轻了程序员的繁重负担。
面向对象程序设计在J2EE和.NET平台中都获得了直接的支持,单根继承加多接口实现是它们共有的特征。但在面向对象之外,.NET对现代组件编程提供了直接支持。当然,当下很多企业中间件都是基于J2EE平台,只是.NET从设计、编码、配置到运行都给予了组件编程更多、更直接的支持。
在基础的和企业级的服务上两个平台很难一决高低。从基础的集合、字符串操作到企业级的API接口,如JMS、JDBC、JAX和JNDI等,J2EE在这方面有着非常坚实的结构。微软.NET框架类库也不示弱,提供了从图画、网络、线程到ADO.NET、ADSI、Windows表单和ASP.NET等一系列的API。
除去API类库的无缝的功能复用外,对本地平台的调用操作也是值得关注的。CLR和Java
虚拟机都支持本地方法的调用。在异构平台方面,J2EE更钟情于IIOP(Internet InterORB Protocol),而.NET则使用SOAP。
(2)相同的三层/多层体系 基于三层/多层分布式计算结构已毋庸置疑地成为当今企业应用的主流模式,也是两个平台较量的着力点。
在客户端,表示层负责用户与系统的交互。对于不同的处理要求,.NET和J2EE都提出了基于桌面的应用程序和基于浏览器的Web应用的开发组件:Java Application与Windows表单、Java Servlet/JSP与ASP.NET双双形成犄角之势。但Windows表单依赖微软桌面系统的天然优势,无论在交互速度还是在界面的表现性能上都较Java Application稍胜一筹。Servlet/JSP与ASP.NET是目前企业在“瘦客户端”应用的重点,两者都基于HTTP请求/响应模型,通过HTML浏览器页面完成用户交互。虽然ASP.NET声称在底层通过编译执行获得了相当高的处理速度和服务器方控件的浏览器自适应能力,但目前并没有这方面的硬性数据,很难据此而论高低。在缓存、状态优化等方面两者可谓是旗鼓相当。另一个与客户端应用相关的技术是ActiveX与Applet,从目前的趋势来看,它们在两个平台上的地位逐渐边缘化,也不为大多数企业所接受。
在中间层,分布式业务组件负责企业应用的商业逻辑部署。由于这些业务组件经常负责处理数据库连接、网络资源和线程等高昂的资源,所以一直是三层/多层架构的关键和企业应用的核心。J2EE的EJB是一个成熟的、得到业界广泛支持的大型企业级组件框架,而.NET组件则是建立在新型的COM+服务之上,两者在组件与操作系统的交互、客户端资源共享等方面都有很好的支持。.NET则通过元数据支持自描述性的组件开发、XCOPY部署以及多版本共存,无需注册表和描述文件,对企业客户有一定的吸引力。
在后端数据层,两个平台都为数据库连接量身定做了一套数据存取模型:J2EE的JDBC和.NET的ADO.NET,它们在支持传统SQL数据源的同时,也支持新型的XML数据源。这方面由于更多地涉及到具体的数据库产品,很难说那种数据模型更有优势。
两种架构的简单对照如表1所示。
表1 J2EE与.NET架构比较
架构 比较项 | J2EE | .NET |
通信协议 | Remote Method Invocation over Internet InterOrb Protocol (RMI/IIOP) | XML |
编程语言 | Java | C#,VB.NET,COBOL等 |
运行时环境 | Java Virtual Machine (JVM) | Common Language Runtime (CLR) |
客户端 | Java Swing | Windows Forms |
目录服务 | Java Naming and Directory Interface (JNDI) | Active Directory Services Interface (ADSI) |
数据访问 | Java Database Connection (JDBC) | Java Connectors ADO.NET |
异步消息处理 | Java Message Service (JMS) | Microsoft Message Queue |
表示层技术 | Servlets, Java Server Page(JSP) | ASP.NET |
中间层组件模型 | EJB,JavaBean | COM+,COM |
安全访问 | JAAS | COM+ Security Call Context |
事物处理 | Java Transaction Server (JTS) | Microsoft Distributed Transaction Coordinator (MS-DTC) |
开发工具 | Borland JBuilder,IBM VisualAge 等 | Visual Studio.NET |
2.安全配置和代码封装的比较
(1)安全配置
两个平台的配置都是通过XML或纯文本文件,两个平台最大的区别在于处理安全配置体系的方式不同。
在.NET平台,有图形接口和命令行二种方式来修改安全配置参数。Mscorcfg.msc是图形接口方式,提供了命令行方式,适用于批处理或配置文本。
JAVA平台只提供了图形接口的工具。和.NET不同的是,它的目标对象(配置文件)的名字和位置不是固定的。
.NET定义了不同范围的安全配置文件:系统范围,本机范围,本用户范围。在配置有冲突时,原则上小范围的参数有优先权。
JAVA和J2EE的核心配置文件都保存在固定位置,但扩展配置文件随厂家不同而不同。
(2)代码封装:检验
JAVA 和.NET 的Common Library Runtime (CLR) 都实行内存安全或类型安全的保护机制,在这些平台开发的应用的安全性也是可以检验的。他们的实现机制有很大的不同。
在.NET, CLR总是执行编译好的代码,它不解释代码。但是在中间语言(IL)被编译之前,编译器会有验证和检验的步骤。第一步是检查文件的结构和代码完整性;第二步包括
两个平台的配置都是通过XML或纯文本文件,两个平台最大的区别在于处理安全配置体系的方式不同。
在.NET平台,有图形接口和命令行二种方式来修改安全配置参数。Mscorcfg.msc是图形接口方式,提供了命令行方式,适用于批处理或配置文本。
JAVA平台只提供了图形接口的工具。和.NET不同的是,它的目标对象(配置文件)的名字和位置不是固定的。
.NET定义了不同范围的安全配置文件:系统范围,本机范围,本用户范围。在配置有冲突时,原则上小范围的参数有优先权。
JAVA和J2EE的核心配置文件都保存在固定位置,但扩展配置文件随厂家不同而不同。
(2)代码封装:检验
JAVA 和.NET 的Common Library Runtime (CLR) 都实行内存安全或类型安全的保护机制,在这些平台开发的应用的安全性也是可以检验的。他们的实现机制有很大的不同。
在.NET, CLR总是执行编译好的代码,它不解释代码。但是在中间语言(IL)被编译之前,编译器会有验证和检验的步骤。第一步是检查文件的结构和代码完整性;第二步包括
一些扩展的检查,内存安全、堆栈跟踪、数据流分析、类型检查等。在运行阶段,由VES (Virtual Execution System) 来负责安全性检查和出错意外情况处理。
在JAVA平台,JAVA虚拟机(JVM)负责类的载入、链接、检验和执行。对于已经编译和优化的代码,JVM也用二个无条件调用堆栈来保留最初的字节代码信息。
小结:和.NET不同,JVM的默认设置是不检验本地代码。另外,JVM保留最初的字节代码供运行时检查,而.NET把静态分析和运行时插入检验代码相结合。
代码封装:应用隔离
在.NET, 域隔离建立在内存安全机制的基础上,不同的域不能直接访问彼此的地址空间,只能通过.NET远程通信机制访问。
在JAVA平台,应用隔离是通过ClassLoaders 和 ProtectionDomains 相结合来实现的,安全类加载是JVM安全机制的基石。
小结:.NET的 AppDomains 就象操作系统的进程一样,使用起来比JAVA的 ProtectionDomains 更直接、容易一些。
代码封装: 语言特征
两个平台基本上差不多,.NET在灵活性上稍微好一点。
在JAVA平台,JAVA虚拟机(JVM)负责类的载入、链接、检验和执行。对于已经编译和优化的代码,JVM也用二个无条件调用堆栈来保留最初的字节代码信息。
小结:和.NET不同,JVM的默认设置是不检验本地代码。另外,JVM保留最初的字节代码供运行时检查,而.NET把静态分析和运行时插入检验代码相结合。
代码封装:应用隔离
在.NET, 域隔离建立在内存安全机制的基础上,不同的域不能直接访问彼此的地址空间,只能通过.NET远程通信机制访问。
在JAVA平台,应用隔离是通过ClassLoaders 和 ProtectionDomains 相结合来实现的,安全类加载是JVM安全机制的基石。
小结:.NET的 AppDomains 就象操作系统的进程一样,使用起来比JAVA的 ProtectionDomains 更直接、容易一些。
代码封装: 语言特征
两个平台基本上差不多,.NET在灵活性上稍微好一点。
(3)总结:
JAVA在安全配置上有较多的优势,.NET在代码封装的选择性和易用性好一些。
3.java源代码加密加密和通信 的比较
JAVA在安全配置上有较多的优势,.NET在代码封装的选择性和易用性好一些。
3.java源代码加密加密和通信 的比较
(1)加密法:概论
.NET的加密法主要基于CryptoAPI 和相关扩展。大多数有关加密的类都在System.security.Cryptography, X509Centificates 和XML中。.NET利用基于流的模型来完成加密传输,所有的算法都被默认为最高的安全级别。.NET也允许用户自己在 fig 中定义自己的算法。
JAVA平台的加密算法分二个部分:Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 JCE的出口受到有关法律的限制。如果要使用用户自己的加密算法,必须得到认证机构(SUN 或 IBM)的认证。
加密法:算法
.NET主要提供了下面几大类加密算法:非对称算法、HASH算法、对称算法、随机数生成法。
JAVA提供的加密算法更多,但是较少第三方厂商可以在JAVA中提供自己的算法。
(2)安全通信
SSL已经是事实的传输安全的工业标准了。JAVA和.NET都支持最新版本 SSL 3.0。
安全通信:平台
.NET只在基于IIS的应用中使用SSL来保护HTTP传输,对于非IIS应用,.NET不能保护传
JAVA平台的加密算法分二个部分:Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 JCE的出口受到有关法律的限制。如果要使用用户自己的加密算法,必须得到认证机构(SUN 或 IBM)的认证。
加密法:算法
.NET主要提供了下面几大类加密算法:非对称算法、HASH算法、对称算法、随机数生成法。
JAVA提供的加密算法更多,但是较少第三方厂商可以在JAVA中提供自己的算法。
(2)安全通信
SSL已经是事实的传输安全的工业标准了。JAVA和.NET都支持最新版本 SSL 3.0。
安全通信:平台
.NET只在基于IIS的应用中使用SSL来保护HTTP传输,对于非IIS应用,.NET不能保护传
输中的数据。
在JAVA中,JSSE (Java Secure Socket Extensions) 提供了平台级的服务,保证基于TCP/IP的通信安全。
除了IIS,.NET没有提供任何其它平台级的通信保护的标准方案,但是JAVA在这方面提供了全套的解决方案。
安全通信:应用
.NET通过WSA (Web Service Architecture)和 WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,JAVA目前还没有提供这方面的支持。
(3)总结:
在加密方法上,JAVA和.NET基本没有太大的差别;在通信保护方面,JAVA 比.NET提供了更多的选择方案;但是在WEB服务安全性上,JAVA明显比.NET落后一些。
在JAVA中,JSSE (Java Secure Socket Extensions) 提供了平台级的服务,保证基于TCP/IP的通信安全。
除了IIS,.NET没有提供任何其它平台级的通信保护的标准方案,但是JAVA在这方面提供了全套的解决方案。
安全通信:应用
.NET通过WSA (Web Service Architecture)和 WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,JAVA目前还没有提供这方面的支持。
(3)总结:
在加密方法上,JAVA和.NET基本没有太大的差别;在通信保护方面,JAVA 比.NET提供了更多的选择方案;但是在WEB服务安全性上,JAVA明显比.NET落后一些。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论