当前位置导航:炫浪网>>网络学院>>网页制作>>JSP教程

将 Java 小程序迁移到 Microsoft J# 浏览器控件

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 页中的 <APPLET> 标记或 Java <OBJECT> 标记必须转换为引用 J# 浏览器控件的 <OBJECT> 标记。

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

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

TagConvert [options] <source files>

例如:

TagConvert.exe MyAppletPage.html

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

该工具可将 <APPLET> 标记或 Java 小程序 <OBJECT> 标记替换为包含以下 J# 浏览器控件 <OBJECT> 标记的 HTML 代码:

<OBJECT
CLASSID="clsid:a399591c-0fd0-41f8-9d25-bd76f632415f"
WIDTH= pixels
HEIGHT= pixels
ID=browserControlName
ALIGN= alignment
HSPACE= pixels
VSPACE= pixels
VJSCODEBASE = codebaseURL
>
<PARAM NAME = parameter1 VALUE = value>
<PARAM NAME = parameter2 VALUE = value>
. . .
alternateHTML
</OBJECT>

其中:

CLASSID
下载并执行 J# 浏览器控件的 ActiveX 控件的 CLASSID。必须在 J# 浏览器控件 <OBJECT> 标记中使用这一确切的 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 页,则可以通过将 <APPLET> 或 Java 小程序 <OBJECT> 标记替换为上述 J# 浏览器控件 <OBJECT> 标记来完成操作。不过,建议您使用示例工具,因为它能够生成附加的 HTML 代码,从而使您在浏览时获得更美好的体验。

转换过程
在转换 HTML 页时,该工具会删除原来的 <APPLET> 标记或 Java 小程序 <OBJECT> 标记,并将其替换为还包含前面描述的 J# 浏览器控件 <OBJECT> 标记的 HTML 代码。

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

该工具使用原来 <APPLET> 标记(或 Java 小程序 <OBJECT> 标记)的 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# 浏览器控件 <OBJECT> 标记中的许多参数与 <APPLET> 或 Java 小程序 <OBJECT> 标记的相应参数相同。

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

/recurse:<wildcard>

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

TagConvert /recurse *.htm *.html

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

/verbose

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

TagConvert /verbose \AppletSources\Pages\*.htm > changedfiles.txt

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

/nologo

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

TagConvert /nologo \AppletSources\Pages\*.htm

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

<APPLET> 标记与 J# 浏览器控件 <OBJECT> 标记之间的属性映射
下表显示了 <APPLET> 标记中的属性与 J# 浏览器控件 <OBJECT> 标记中的属性之间的映射。

<APPLET> 标记语法(包括 Internet Explorer 扩展) J# 浏览器控件 <OBJECT> 标记语法
CODEBASE
VJSCODEBASE

CODE
VJSCODEBASE

WIDTH
WIDTH

HEIGHT
HEIGHT

NAME
ID

ID
ID

ALIGN
ALIGN

VSPACE
VSPACE

HSPACE
HSPACE

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

ALT
ALT

<PARAM>
<PARAM>

<PARAM NAME = FireScriptEvents VALUE = True>
在当前版本中保留不变但不受支持

<PARAM NAME = cabbase VALUE = cabFileName>

<PARAM NAME = cabinets VALUE = cabFileNames>
在当前版本中保留不变但不受支持

<PARAM NAME = useslibrary VALUE = DUFriendlyName>

<PARAM NAME = useslibrarycodebase VALUE = DUFileName>

<PARAM NAME = useslibraryversion VALUE= DUVersionNumber>
在当前版本中保留不变但不受支持

<PARAM NAME = namespace VALUE = applicationNamespace>
在当前版本中保留不变但不受支持


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

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

&#8226; useslibrary、useslibrarycodebase、useslibraryversion 和 namespace 属性。J# 浏览器控件运行库不支持 MSJVM 的 Java 包管理器语义。


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

如果 <APPLET> 或 Java 小程序 <OBJECT> 标记除了具有 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# 浏览器控件的 <OBJECT> 标记均必须指向同一个托管库,但指向不同的类名。例如,如果虚拟目录 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 don't 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# 浏览器控件中,以下功能不受支持:

&#8226; 基于信任的安全

不支持 MSJVM 所支持的基于信任的安全语义。将 Java 小程序迁移到 J# 浏览器控件以后,这些小程序将使用 Security Semantics for J# Browser Controls 中描述的安全语义。

&#8226; Java 包管理器

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

&#8226; 存档文件

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

&#8226; 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]


&#8226; 对所有事件语法的支持

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

<SCRIPT language="JavaScript" for="MyAxClass1"
event="dataUpdated(atTime, msg)">
alert("Event occurred. Event Name= dataUpdated, " +
"Time= " + atTime + ", Message= " + msg );
</SCRIPT>


&#8226; 没有设计器支持

Visual Studio .NET 中没有针对 J# 浏览器控件的设计器支持。


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

相关内容
赞助商链接