java程序获取外部java程序的控件,将 Java 小程序迁移到 Microsoft J# 浏览器控件-JSP教程,Java技巧及代码...

visual j# .net 小组

microsoft corporation

摘要:通过 microsoft j# 浏览器控件,开发人员可以将所编写的在 java 虚拟机上运行的 java 小程序迁移到 .net 框架。本文向开发人员介绍 j# 浏览器控件,并说明将 java 小程序迁移到 .net 框架的步骤。本文还讨论了其他一些主题,如 j# 浏览器控件的安全性和调试,以及当前版本中不受支持的功能。

下载 html 小程序到对象标记转换器 (95kb)

本文假设开发人员熟悉 .net 框架和 visual j# .net。要下载 j# 浏览器控件运行库,请参阅 http://msdn.microsoft.com/vjsharp/downloads/browsercontrols/。

本页内容

简介

新增功能

将 java 小程序编译为 j# 浏览器控件

将 html 页更新为使用 j# 浏览器控件

部署 j# 浏览器控件

在用户计算机上运行 j# 浏览器控件

当前版本中不受支持的功能

小结

简介

已经使用 visual j# .net 迁移到 .net 框架的 java 小程序称为 j# 浏览器控件。j# 浏览器控件旨在让客户能够将其现有的 java 小程序迁移到 .net 框架。

经过迁移得到的 j# 浏览器控件与原来的 java 小程序具有类似的运行时行为,并保留了 java 语言语义。如果在计算机上安装了 j# 浏览器控件运行库,用户甚至可能意识不到特定的 web 站点已将其 java 小程序升级到了 j# 浏览器控件。

要将 java 小程序迁移到 j# 浏览器控件,您必须安装 visual j# .net 1.1 版可重新发布软件包以及 .net 框架 sdk 1.1 版或 visual studio .net 2003。同样,如果用户希望运行由 web 站点承载的 j# 浏览器控件,则必须在自己的计算机上安装 .net 框架 1.1 版可重新发布软件包和 j# 浏览器控件运行库。j# 浏览器控件不能在 java 虚拟机上运行。j# 浏览器控件只能在 microsoft internet explorer(5.1 版和更高版本)中运行。

将 java 小程序迁移到 j# 浏览器控件的过程包括三个步骤:

1.

使用 visual j# 编译器将 java 小程序编译为 j# 浏览器控件。

2.

将 html 页更新为使用 j# 浏览器控件而不是使用 java 小程序。

3.

将 j# 浏览器控件和 html 页复制到 web 服务器。

返回页首

新增功能

j# 浏览器控件 1.1b 版中添加了以下功能:

脱机支持

microsoft j# 浏览器控件 1.1b 版现在支持在没有 web 服务器的情况下,在 internet explorer 中加载控件。目前支持以下方案:

• 从本地文件系统加载控件

• 从网络共享位置加载控件

• 从网络驱动器加载控件

在上述所有方案中,j# 浏览器控件在默认情况下都将通过 intranet 权限运行。

脚本支持

microsoft j# 浏览器控件 1.1b 版支持以下脚本方案。

• 脚本调用 j# 浏览器控件的方法并访问其属性

• 从 j# 浏览器控件调用脚本事件

• j# 浏览器控件使用 netscape javascript api 来访问由 internet explorer 对象模型公开的网页中的元素。

j# 浏览器控件 1.1b 版还提供对 netscape javascript api 功能的完整支持。netscape.javascript 小程序 api 软件包具有以下类:

• netscape.javascript.jsobject

• netscape.javascript.jsexception

返回页首

将 java 小程序编译为 j# 浏览器控件

可以通过使用 visual j# 编译器 (vjc.exe) 将 java 小程序编译为托管库,从而将其迁移到 j# 浏览器控件。可以从命令提示符下也可以从 visual studio .net 中将 java 小程序源代码编译为 j# 浏览器控件。如果 java 小程序是使用 microsoft visual j++ 6.0 开发的,可能只须使用 visual studio .net 将项目升级到 visual j# .net。

将 java 小程序编译为托管库类似于在 visual j# 中编译任何其他库。大多数情况下,在将 java 小程序编译为托管库时,不需要对 java 小程序源代码进行任何更改,这是因为 j# 浏览器控件运行库提供了对 microsoft java 虚拟机中许多功能的支持。这包括对 jdk 1.1.4 级软件包和 java.applet 软件包中的功能的支持。

包含 j# 浏览器控件的托管库与 .net 框架中的其他托管库没有什么不同。当用户访问承载了 j# 浏览器控件的 web 站点时,j# 浏览器控件运行库将下载该托管库并在 internet explorer 中运行它。

使用 applet class 文件创建 j# 浏览器控件

如果只存在 java 小程序的 java 语言字节码(.class 文件),则可以使用 visual j# 二进制转换器工具 (jbimp.exe) 将 java 小程序转换为托管库。

从命令提示符下编译 java 小程序

您可以使用 visual j# 编译器 (vjc.exe) 从命令行编译 java 小程序。例如:

c:\appletsources>vjc.exe /target:library /out:myapplet.dll *.java

该命令会将 java 小程序源文件(带有 .java 扩展名)编译为名为 myapplet.dll 的新 .net 框架 dll。

您还可以使用 visual j# 二进制转换器工具:

c:\appletsources>jbimp.exe /target:library /out:myapplet.dll *.class

如果您安装了 visual studio .net,则可以从 visual studio .net 命令窗口中访问 visual j# 编译器 (vjc.exe) 和 visual j# 二进制转换器工具 (jbimp.exe)。如果您未安装 visual studio .net,则必须确保这些工具位于您在命令提示符下键入的路径中。

在迁移使用资源的 java 小程序时,您必须按照 upgrading visual j++ 6.0 applications that use resources 和 howto:resources in visual j# .net 中描述的步骤操作。

使用 visual studio .net 迁移 java 小程序

如果 java 小程序是一个 visual j++ 6.0 项目,则还可以使用 visual studio .net 来迁移它。

使用 visual studio .net 升级 visual j++ 6.0 项目

1.

在 visual studio .net 中打开 visual j++ 6.0 项目。这将启动 visual j# .net 项目升级向导。

2.

在该升级向导的所有步骤中都单击 next。升级向导将把该 visual j++ 项目转换成 visual j# .net 类库项目。

3.

打开升级报告,以便了解向导是否在升级过程中检测到问题。

注 报告中将提到 applet projects are not supported。您可以忽略该错误。在生成项目之前,您必须解决升级报告中列出的所有其他问题。

4.

生成项目。这会将 java 小程序编译为托管库。

在 visual studio 中,您无法通过单击 debug 然后单击 start 或者通过按 f5 来在 internet explorer 中启动 j# 浏览器控件。您必须将控件复制到 web 服务器的虚拟目录中,才能运行它。有关详细信息,请参阅部署 j# 浏览器控件和 how to:debug j# browser controls。

有关将 visual j++ 6.0 项目升级到 visual j# .net 的详细信息,请参阅 upgrading from visual j++ 6.0。

与使用 netscape liveconnect api 的小程序有关的其他步骤

除了上述白皮书中介绍的迁移步骤以外,开发人员在编译使用 netscape liveconnect api 的小程序时,将需要引用一个附加的程序集。j# 浏览器控件 1.1b 版中提供了对 liveconnect api 功能的支持。

注 如果开发人员迁移利用 netscape jscript api 的小程序,则需要在其开发计算机上安装 j# 浏览器控件 1.1b 版,然后才能包含对该程序集的引用。

要从命令行编译,请按以下方式包含该引用:

vjc /r:??%programfiles%\microsoft jsharp browser controls v1.1\vjsjbc.dll??

/t:l myapplet.java

如果您使用的是 visual studio .net 2003,则需要在引用列表中添加对该程序集的引用。有关详细信息,请参阅 add reference dialog box。

如果您使用的是 jbimp,请使用以下命令将 java 小程序 .class 文件转换为 j# 浏览器控件程序集。

jbimp /r:??%programfiles%\microsoft jsharp browser controls

v1.1\vjsjbc.dll?? /t:l myapplet.class

返回页首

将 html 页更新为使用 j# 浏览器控件

将 java 小程序编译为 j# 浏览器控件以后,下一步是将 html 页更新为开始使用迁移后的控件。html 页中的 标记或 java 标记必须转换为引用 j# 浏览器控件的 标记。

本白皮书包含一个称为“html 小程序到对象标记转换器”(tagconvert.exe) 的示例工具,它能够自动将 html 页升级为使用 j# 浏览器控件。用于下载该示例工具的链接位于本白皮书的开头部分。请下载并运行 tagconvertsetup.exe 以便安装“html 小程序到对象标记转换器”(tagconvert.exe)。

可按以下方式使用该工具:

tagconvert [options]

例如:

tagconvert.exe myappletpage.html

该工具的输入可以是任何文本文件,其扩展名可以是 .html、.htm、.asp 和 .aspx。

该工具可将 标记或 java 小程序 标记替换为包含以下 j# 浏览器控件 标记的 html 代码:

classid="clsid:a399591c-0fd0-41f8-9d25-bd76f632415f"

width= pixels

height= pixels

id=browsercontrolname

align= alignment

hspace= pixels

vspace= pixels

vjscodebase = codebaseurl

>

. . .

alternatehtml

其中:

classid

下载并执行 j# 浏览器控件的 activex 控件的 classid。必须在 j# 浏览器控件 标记中使用这一确切的 classid。

vjscodebase

j# 浏览器控件类的 url 以及包含该类的托管库。符号“#”用于将托管库文件名与 j# 浏览器控件类名分隔开来。如果该文件名包含空格字符,则需要将 vjscodebase 属性值放在引号内。该文件名还必须包括文件扩展名。例如:

vjscodebase =

http://www.microsoft.com/myapplet/myappletclass.dll#myappletclass

基本代码 (codebase) 还可以是相对 url。例如:如果页面位于 http://www.microsoft.com/myapplet/myappletpage.htm,则

vjscodebase =

myappletclass.dll#myappletclass

引用位于 http://www.microsoft.com/myapplet/ 的 myappletclass.dll 中的浏览器控件 myappletclass。

如果您选择手动更新 html 页,则可以通过将 或 java 小程序 标记替换为上述 j# 浏览器控件 标记来完成操作。不过,建议您使用示例工具,因为它能够生成附加的 html 代码,从而使您在浏览时获得更美好的体验。

转换过程

在转换 html 页时,该工具会删除原来的 标记或 java 小程序 标记,并将其替换为还包含前面描述的 j# 浏览器控件 标记的 html 代码。

在转换标记之前,该工具会创建原文件的备份。文件的备份副本将带有 .vjsbak 扩展名。例如,index.htm 将被备份为 index.htm.vjsbak。备份文件创建于原文件的目录中。

该工具使用原来 标记(或 java 小程序 标记)的 code 和 codebase 属性中的值来创建 vjscodebase 属性的值。例如:

code = "myappletclass"

codebase = http://www.microsoft.com/myapplet

被修改为:

vjscodebase =

http://www.microsoft.com/myapplet/myappletclass.dll#myappletclass

默认情况下,该工具假设 j# 浏览器控件类的名称(例如,myappletclass)与 dll (myappletclass.dll) 的名称相同。如果 j# 浏览器控件类与 dll 的名称不同,您必须相应地修改 vjscodebase 属性值。因此,在使用该工具时,建议您将 java 小程序编译为与小程序类具有相同名称的托管库。例如:

c:\myappletclasssources>vjc /target:library /out:myappletclass.dll *.java

j# 浏览器控件运行库在 vjscodebase 属性中只支持 http、file 和 https 协议。指定相对路径后,将使用加载 html 页时所用的协议来加载 j# 浏览器控件。j# 浏览器控件不支持从 docbase 之外的位置来加载控件。vjscodebase 中的值必须与 docbase 相同,或者必须是 docbase 的子目录之一。docbase 所引用的位置就是从中加载 html 页的位置。

在转换过程中,object 的许多属性保持不变。以下部分中说明了 tagconvert 所转换的属性的详细信息。j# 浏览器控件 标记中的许多参数与 或 java 小程序 标记的相应参数相同。

命令行选项

受支持的命令行选项包括:

/recurse:

根据通配符规范,在当前目录及其所有子目录中搜索要转换的文件。例如:

tagconvert /recurse *.htm *.html

升级当前目录及其子目录中具有 .htm 和 .html 扩展名的所有文件。

/verbose

打印在转换过程中发生更改的文件的名称。文件名包括文件的完全限定路径。该工具还可打印所分析文件的总数以及所转换文件的总数。例如:

tagconvert /verbose \appletsources\pages\*.htm > changedfiles.txt

升级指定目录中具有 .htm 扩展名的所有文件,并将经过修改的文件的名称转储到 changedfiles.txt 文件中。

/nologo

取消显示版权信息。例如:

tagconvert /nologo \appletsources\pages\*.htm

升级指定目录中具有 .htm 扩展名的所有文件,并取消显示版权信息。

标记与 j# 浏览器控件 标记之间的属性映射

下表显示了 标记中的属性与 j# 浏览器控件 标记中的属性之间的映射。

标记语法(包括 internet explorer 扩展) j# 浏览器控件 标记语法

codebase

vjscodebase

code

vjscodebase

width

width

height

height

name

id

id

id

align

align

vspace

vspace

hspace

hspace

archive

在当前版本中已删除并且不受支持

alt

alt

在当前版本中保留不变但不受支持

在当前版本中保留不变但不受支持

在当前版本中保留不变但不受支持

在当前版本中保留不变但不受支持

在当前版本中, 标记中的以下属性不受支持,并且在 j# 浏览器控件 标记中没有等效属性。

• archive、cabbase 和 cabinets 属性。在当前版本中,不支持将 j# 浏览器控件打包成 .cab、.zip 或 .jar 文件。j# 浏览器控件必须作为独立的 .dll 文件部署到 web 服务器上。

• useslibrary、useslibrarycodebase、useslibraryversion 和 namespace 属性。j# 浏览器控件运行库不支持 msjvm 的 java 包管理器语义。

标记中的那些在 标记中具有直接等效属性的属性可以按原样复制。它们在 j# 浏览器控件 标记中和在原来的 标记中具有相同的含义。

如果 或 java 小程序 标记除了具有 id 属性以外,还具有 name 属性,则将删除 name 属性,并使用 id 属性中的值。

返回页首

部署 j# 浏览器控件

部署 j# 浏览器控件就像将托管库和更新过的 html 页复制到 web 服务器或用户计算机上的相应目录中一样简单。web 服务器不再是部署 j# 浏览器控件的必要条件。必须将托管库复制到 html 页所在的目录中或者某个子目录中。

使用 iis web 服务器时,必须将虚拟目录上的 executepermissions 字段设置为 scripts only,即 iis 中的虚拟目录的默认权限级别。

部署多 dll 浏览器控件

可以将一个 j# 浏览器控件拆分为多个 dll 文件。在这种情况下,必须在 html 页中引用包含主要 j# 浏览器控件类的 dll。j# 浏览器控件运行库将在运行时根据需要下载其他 dll。

在部署多 dll 控件时,必须将与同一 j# 浏览器控件相关的所有文件复制到同一目录中。这些文件必须作为独立文件进行复制,并且不能打包成 .cab、.zip 或 .jar 文件。

将多个 j# 浏览器控件打包到同一个库中

您还可以将多个 j# 浏览器控件打包到同一个托管库中。在这种情况下,每个 j# 浏览器控件的 标记均必须指向同一个托管库,但指向不同的类名。例如,如果虚拟目录 appletdir 中的 myapplets.dll 包含名为 myapplet1 和 myapplet2 的 j# 浏览器控件,则您可以按以下示例所示来引用这两个 j# 浏览器控件:

vjscodebase="http://www.microsoft.com/appletdir/myapplets.dll#myapplet1"

vjscodebase="http://www.microsoft.com/appletdir/myapplets.dll#myapplet2"

因为 j# 浏览器控件只能从 html 页所在的目录或其某个子目录中下载,所以如果 html 页的目录不同,您可能需要将托管库复制到多个位置。

返回页首

在用户计算机上运行 j# 浏览器控件

最终用户除了在自己的计算机上安装 j# 浏览器控件运行库以外,不需要了解 j# 浏览器控件。

在用户计算机上安装 j# 浏览器控件运行库支持

用户必须在自己的计算机上安装 j# 浏览器控件运行库后,才能在 internet explorer 中查看和使用 j# 浏览器控件。您和您的网站管理员需要为最终用户提供下载和安装 j# 浏览器控件的方法。j# 浏览器控件运行库还支持使用 sms 或组策略进行安装。有关使用 sms 或组策略部署 j# 浏览器控件的详细信息,请参阅 http://www.microsoft.com/smserver/techinfo/deployment/20/default.asp 或 http://www.microsoft.com/windows2000/techinfo/reskit/dpg/default.asp。

j# 浏览器控件的安全行为

默认情况下,j# 浏览器控件运行库在运行 internet 网页上承载的控件之前,会提示最终用户。当用户浏览到含有 j# 浏览器控件的 internet web 站点时,将显示以下对话框:

如果用户单击 yes,将下载并运行 j# 浏览器控件。单击 no 将禁止 j# 浏览器控件运行。

如果选中 add this site to the list of sites allowed to run j# browser controls and dont ask me again 复选框并单击 yes,则会将该 web 站点添加到允许运行 j# 浏览器控件的网站列表中,并且当用户以后访问该 web 站点上的网页时,将不会提示用户。该复选框的默认值被设置为已选中。

j# 浏览器控件运行库在从 intranet 上的 web 站点中运行时,不会提示用户。

用户还可以使用“control panel”中“administrative tools”下提供的“j# browser controls security options”对话框,来管理允许运行 j# 浏览器控件的网站列表。在 windows xp 中,您可以从“control panel”中的 performance and maintenance 访问该对话框。在 windows 98 和 windows millennium edition 中,您可以从“start”菜单中的“administrative tools”菜单访问该对话框。双击 j# browser control security 图标可打开以下对话框:

选项包括:

disable j# browser controls

禁止来自任何 web 站点的 j# 浏览器控件在计算机上运行。

only from web sites in this list

只允许来自列表中 web 站点的 j# 浏览器控件运行。

only on the intranet and from web sites in this list

只允许来自 intranet 或来自列表中 web 站点的 j# 浏览器控件在计算机上运行。这是默认设置。

on any web site

允许来自任何 web 站点的 j# 浏览器控件在计算机上运行。建议不要使用该选项,如果使用应十分小心。

在 add web site 文本框中输入一个 web 站点的地址,然后单击 add,就会将该 web 站点添加到允许运行 j# 浏览器控件的网站列表中。同样,从 web sites allowed to run j# browser controls 列表中选择某个 web 站点,然后单击 remove,就会将该网站从列表中删除。将某个 web 站点添加到允许运行 j# 浏览器控件的网站列表中以后,用户在运行该 web 站点上的 j# 浏览器控件之前将不会得到提示。

默认情况下,将选中 prompt to add new web sites to this list in the future 复选框,这会使 j# 浏览器控件运行库在运行来自该列表外部的 web 站点的 j# 浏览器控件之前提示用户。当该复选框被清除后,将不会运行来自该列表外部的 web 站点的 j# 浏览器控件,并且不会提示用户。

返回页首

当前版本中不受支持的功能

在当前版本的 j# 浏览器控件中,以下功能不受支持:

• 基于信任的安全

不支持 msjvm 所支持的基于信任的安全语义。将 java 小程序迁移到 j# 浏览器控件以后,这些小程序将使用 security semantics for j# browser controls 中描述的安全语义。

• java 包管理器

msjvm 中支持的 java 包管理器功能在 j# 浏览器控件中不受支持。j# 浏览器控件不支持对象缓存(对象缓存可用来在本地安装类,然后使用权限签名通过一组受限制的权限来运行这些类)。因此,也不支持安装和运行 distribution units。

• 存档文件

存档文件不受支持。一个 j# 浏览器控件可以拆分为多个托管库。然而,将多库控件部署到 web 服务器时,这些文件必须作为独立文件进行复制,并且不能打包成 .cab、.zip 或 .jar 文件。

• java 控制台支持

j# 浏览器控件 1.1b 版不支持 internet explorer 中的 java 控制台。不过,为了从代码中使用控制台打印语句来调试 j# 浏览器控件,可以将 internet explorer 的输出重定向到某个文件。

%program files%\internet explorer\iexplore.exe [html address] >

[output file path] 2> [error file path]

• 对所有事件语法的支持

该版本不支持任何事件语法,只支持以下语法。

alert("event occurred. event name= dataupdated, " +

"time= " + attime + ", message= " + msg );

• 没有设计器支持

visual studio .net 中没有针对 j# 浏览器控件的设计器支持。

返回页首

小结

j# 浏览器控件为开发人员提供了一种迁移自己的 java 小程序以便在 .net 框架上运行的方法。经过迁移得到的 j# 浏览器控件与原来的 java 小程序具有相同的运行时行为,并保留了 java 语言语义。j# 浏览器控件还具有对 .net 框架的完整访问权限,包括访问针对 xml web 服务的本机支持的能力。它们还为 j# 开发人员提供了一种在基于 web 的应用程序中添加丰富的客户端功能的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值