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 页中的
本白皮书包含一个称为“HTML 小程序到对象标记转换器”(TagConvert.exe) 的示例工具,它能够自动将 HTML 页升级为使用 J# 浏览器控件。用于下载该示例工具的链接位于本白皮书的开头部分。请下载并运行 TagConvertSetup.exe 以便安装“HTML 小程序到对象标记转换器”(TagConvert.exe)。
可按以下方式使用该工具:
TagConvert [options]
例如:
TagConvert.exe MyAppletPage.HTML
该工具的输入可以是任何文本文件,其扩展名可以是 .HTML、.htm、.ASP 和 .ASPx。
该工具可将
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# 浏览器控件
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 页,则可以通过将
转换过程
在转换 HTML 页时,该工具会删除原来的
在转换标记之前,该工具会创建原文件的备份。文件的备份副本将带有 .vjsbak 扩展名。例如,index.htm 将被备份为 index.htm.vjsbak。备份文件创建于原文件的目录中。
该工具使用原来
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# 浏览器控件
命令行选项
受支持的命令行选项包括:
/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 扩展名的所有文件,并取消显示版权信息。
下表显示了
CODEBASE
VJSCODEBASE
CODE
VJSCODEBASE
WIDTH
WIDTH
HEIGHT
HEIGHT
NAME
ID
ID
ID
ALIGN
ALIGN
VSPACE
VSPACE
HSPACE
HSPACE
ARCHIVE
在当前版本中已删除并且不受支持
ALT
ALT
在当前版本中保留不变但不受支持
在当前版本中保留不变但不受支持
在当前版本中保留不变但不受支持
在当前版本中保留不变但不受支持
在当前版本中,
" archive、cabbase 和 cabinets 属性。在当前版本中,不支持将 J# 浏览器控件打包成 .cab、.zip 或 .jar 文件。J# 浏览器控件必须作为独立的 .dll 文件部署到 Web 服务器上。
" useslibrary、useslibrarycodebase、useslibraryversion 和 namespace 属性。J# 浏览器控件运行库不支持 MSJVM 的 Java 包管理器语义。
如果
返回页首
部署 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# 浏览器控件的
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# 浏览器控件中,以下功能不受支持:
" 基于信任的安全
不支持 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]
" 对所有事件语法的支持
该版本不支持任何事件语法,只支持以下语法。
" 没有设计器支持
Visual Studio .NET 中没有针对 J# 浏览器控件的设计器支持。
返回页首
小结
J# 浏览器控件为开发人员提供了一种迁移自己的 Java 小程序以便在 .NET 框架上运行的方法。经过迁移得到的 J# 浏览器控件与原来的 Java 小程序具有相同的运行时行为,并保留了 Java 语言语义。J# 浏览器控件还具有对 .NET 框架的完整访问权限,包括访问针对 XML Web 服务的本机支持的能力。它们还为 J# 开发人员提供了一种在基于 Web 的应用程序中添加丰富的客户端功能的方法。

