仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 620|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之在.NET平台运转Java程序-IKVM.NET进门

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。程序择要

  IKVM.NET是一个针对Mono和微软.net框架的java完成,其计划目标是在.NET平台上运转java程序。本文将对照具体的先容这个工具的道理、利用进门(怎样java使用转换为.NET使用、怎样在java中开辟.NET使用),但愿能给人人带来欣喜。

1、先容

  IKVM.NET是一个针对Mono和微软.net框架的java完成,其计划目标是在.NET平台上运转java程序。它包括了以下的组建:
*一个用.NET完成的java假造机
*一个java类库的.NET完成
*努力于在java和.NET之间交互的工具

2、IKVM.NET的组件

  IKVM.NET包括以下的部分:
*IKVM.Runtime.dll:VM运转时和一切撑持代码。它包含以下的功效:
ByteCodeJIT编译器和考证器:利用JIT将JavaByteCode编译为CIL(C两头言语)。
工具形式映照布局:将.NET中的System.Object,System.String,System.Exception映照为java代码中的java.lang.Object,java.lang.String,java.lang.Throwable。
办理当地办法(在Classpath中)的.NET从头完成。
*IKVM.GNU.Classpath.dll:被编译的GNUClasspath版本,它是由自在软件基金会完成的java类库和一些IKVM.NET附加代码构成的。注重:这里的GNUClasspath不是IKVM.NET的一部分,可是前者被用在IK.VM.NET中。
*IKVM.JNI.[Mono|CLR-Win32].dll:经由过程完成JNI接口办理C++汇编。作为一个可选部分,只在程序利用本人的当地库时才被用到。而关于纯java程序来说是不会被用到的。
*ikvm.exe:与java.exe很相似的启动实行程序(静态形式)。
*ikvmc.exe:静态编译器,被用来编译java类和jar使其成为.NET汇编(静态形式)。
*ikvmstub.exe:一个从.NET汇编天生存根类的工具,就如javap一样反编译.NET汇编。IKVM.NET懂得怎样存根并用实践的.NET范例援用交换对存根的援用。
*IKVM.AWT.WinForms.dll:十分无限的零星AWT完成。

2、项目形态

  此项目今朝正在开辟,将最年夜化完成与JDK1.4的兼容,可是仍存在一些毛病(特别在ClasspthAPI中)。
*AWT和Swing还未有功效。
*平安性是IKVM平台的一个年夜漏掉。此成绩将依托.NET平台供应的旧有的、但功效壮大的平安形式而被办理。固然如许,今朝项目已具有能乐成运转年夜型java项目标才能。

3、IKVM道理

1.怎样交换JVM

  IKVM使用包括了接纳.NET完成的java假造机。在一些场所,我们能够用它交换失落java。比方:java-jarmyapp.jar将被交换为ikvm-jarmyapp.jar。

2.在.NET使用中利用java类库

  IKVM.NET包括ikvmc,这个在javabytecode与.NET两头言语的转换器。假如我们利用一个被用在.NET平台的java库的话,运转ikvmcCtarget:librarymylib.jar(mylib.jar在这里指代我们的jar文件)来天生mylib.dll。比方apacheFOP项目是一个开源的XSL-FO处置器项目,它利用java言语编写的用于从xml天生PDF文档。利用IKVM.NET手艺,我们能够将apacheFOP用在任何的.NET使用中。如许在开辟.NET使用的同时使用IKVM即可以利用java开源项目这个收费的软件堆栈。只管在IKVM.NET没有供应在.NET中利用的java编译器,可是我们可用开源的Jikes编译器将java源代码编译为JVMbytecode,然后利用ikvmcCtarget:exemyapp.jar来临盆.NET实行文件。我们乃至能够经由过程包括ikvmstub使用的体例在我们的java代码顶用.NETAPI。

4、IKVM利用进门

1.体系筹办

Windows平台:Microsoft.NETFramework1.1SDK
Windows大概Linux平台:MonoFramework1.0

2.入手下手安装

  在Windows和Linux平台上安装历程是不异的,鄙人载二进制公布版后,将文件解紧缩。翻开命令大概shell窗口,cd进进ikvmin目次,实行ikvm。假如我们操纵准确的话,我们将看到以下的输入:

usage:ikvm[-options]<class>[args...](toexecuteaclass)orikvm-jar[-options]<jarfile>[args...](toexecuteajarfile)...

  为了便利利用,我们可将ikvmin目次到场到体系path。如今我们将利用IKVM就像利用JVM一样,其实不必要设置。假如我们必要在.NET大概Mono情况下利用IKVM,请细心浏览上面的笔墨申明:

*起首下载Jikes编译器。假如我们企图开辟在java中开辟代码运转于.NET情况的话,我们将要一个java编译器。IKVM.NET没有供应这个编译器,以是我们必要能天生尺度java类文件的编译器。Jlikes是一个好选择,它是一个优异的开源项目,并使用在多种平台。固然Sun供应的jdk也很好。

*在Windows的全局汇编缓冲区中安装IKVMdll。在Windows中运转基于IKVMdll的.NET使用程序时,.NET框架必需定位这些dll的地位。体系起首在全局汇编缓冲区中查找,然后再以后目次中查找。假如我们想不在以后目次中安装这些dll文件的话,我们就要将它们安装在全局汇编缓冲区中:在Windows把持面板中会见.NET框架设置,增添一个汇编缓冲区。我们最少要安装IKVM.GNU.Classpath.dll和IKVM.Runtime.dll。

3.设置情况

  在我们入手下手编写代码之前必要筹办一下我们的情况,增加以下路径到体系PATH情况变量中:
*包括IKVM实行文件的目次。
*包括C#编译器(在Windows/Mono中为csc)的目次,一般在Windows中为C:WINDOWSMicrosoft.NETFrameworkv1.1.4322。
*包括java编译器(javac大概jikes)的目次。

4.静态实行java使用程序

  IKVM.NET包含了一个C#完成的java假造机。我们能够从一个例子入手下手――进进IKVMROOTsampleshello目次,编译示例程序:
  1. JavacHellojarcfmhello.jarmanifest.mfHello.class
复制代码
  如今,在利用javac编译了Hello类后,我们利用IKVM运转此类:
  1. ikvmHello
复制代码
  这个命令将启动IKVM,IKVM查找名为Hello.class的文件。假如找到,则将其装载并静态实行bytecode。此时Hello程序将请求我们输出名字,以后我们将看到一个问候信息。

  假如在下面的过程当中产生成绩,请反省上面的中央:
*反省命令行:ikvm像java一样必要我们输出准确的类名。
*假如ikvm呈报ClassNotFoundException,请反省CLASSPATH情况变量是不是被设置。假如被设置,请扫除CLASSPATH大概将以后目次到场到CLASSPATH中以使ikvm可以在以后目次中找到类。

假如运转jar文件,我们可键进:
  1. ikvm-jarhello.jar
复制代码
提醒:具体的命令行选项能够参考ikvm手册

5.将java程序转换为.NET程序

  IKVM.NET包括ikvmc这个可以将jar文件转换为.NET的dll库文件和exe使用的工具。上面我们将进修怎样将java使用转换为一个.NET实行文件:

  进进IKVMROOTsampleshello目次输出以下命令:

ikvmchello.jar

  注重:当我们利用Mono时,我们必要告知ikvmc怎样找到GNUClasspathdll,比方:

  ikvmc-reference:/usr/lib/IKVM.GNU.Classpath.dllhello.jar

  在命令实行完后,我们将发明hello.exe已被天生在以后目次:
*在Windows/.NET情况下,假如我们失掉了FileNotFound的非常,请记着反省.NET框架但愿在以后目次或是全局汇编缓冲区中寻觅dll文件。我们能够经由过程下面讲的办法将dll安装到全局汇编缓冲区中,大概将dll文件间接复制到以后目次。

*在Linux/Mono情况下,我们利用上面的命令实行hello.exe:

monohello.exe

6.在java中开辟.NET使用

  起首进进IKVMROOTsamplesusenetapi目次,找到ShowDir.java文件,这个java使用利用了.NETAPI来显现以后目次下的文件列表。翻开这个文件,我们会发明其导进的包名以cli开首,这些并非javaAPI包,它们是映照到.NET定名空间的“伪”包。必要检察更多信息请看IKVM的开辟者手册

第一步:天生java存根文件

  IKVM没有供应java编译器,以是我们可使用尺度的java编译器。因为java编译器只能编译利用了javaAPI的使用程序,而不是利用.NETAPI的使用。以是我们在这里必要“捉弄”一下java编译器使其信任名为cli.System.IO的包是一个真实的java包。匡助我们完成这项事情的是ikvmstub程序。它从.NETdll天生jar文件,这个被天生的jar文件包括了与.NET类对应的java类和接口,可是其实不包括真实的代码,只包括一些映照信息。如许做便会经由过程java编译器的反省和编译:
  1. ikvmstubmscorlib.dll
复制代码
注重:在LinuxMono情况下,我们必需输出dll文件的完全路径,比方:
ikvmstub/usr/lib/mscorlib.dll

在编译完成后,我们将在以后目次下发明一个名为mscorlib.jar的文件。

第二步:编译java源代码

如今我们将编译java源代码,假如利用javac的话,可输出以下命令:
  1. javac-classpathmscorlib.jarShowDir.java
复制代码
在命令完成后,ShowDir.class文件将呈现以后目次下。

第三步:天生.NET实行文件

最初我们将转换javaclass文件为.NET使用程序,正如后面讲的:
  1. ikvmcShowDir.class
复制代码
注重:在LinuxMono情况下,我们必要利用后面提到的-reference选项:
  1. ikvmc-reference:/usr/lib/IKVM.GNU.Classpath.dllShowDir.class
复制代码
这时候我们即可以看到ShowDir.exe呈现在以后目次。

5、参考资本:
http://www.ikvm.net/实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-19 16:27:44 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
小魔女 该用户已被删除
板凳
发表于 2015-1-25 23:01:34 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
兰色精灵 该用户已被删除
地板
发表于 2015-2-9 22:57:31 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
金色的骷髅 该用户已被删除
5#
发表于 2015-2-28 03:41:40 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
简单生活 该用户已被删除
6#
发表于 2015-3-9 20:31:40 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-17 01:08:59 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
活着的死人 该用户已被删除
8#
 楼主| 发表于 2015-3-23 11:48:31 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 15:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表