UML软件工程组织

将 Java 小程序迁移到 Microsoft J# 浏览器控件
Krishnan Thazhathekalam
Visual J# 组
Microsoft Corporation
转载 Microsoft
 

摘要:J# 浏览器控件实用程序为将 Java 小程序迁移到 .NET Framework 提供了必要的支持。本文介绍了将 Java 小程序迁移到 J# 浏览器控件的步骤,并探讨了开发人员和最终用户的安全问题以及在技术预览版中不支持的功能。

升级 HTML 项目中的 Visual J++ 小程序

将 HTML 项目中的 Visual J++® 小程序升级到 J# 浏览器控件需要以下三个步骤:

  • 升级 Visual J++ 项目。
  • 将 HTML 页中的 <APPLET> 标记转换成 <OBJECT> 标记。
  • 部署托管库和升级后的 HTML 页。

将 Visual J++ 项目升级到 Visual J# .NET

  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. 项目的输出是一个托管库,必须将其部署到服务器,而不能部署到字节码 (.class) 文件。

有关详细信息,请参阅 Upgrading from Visual J++ 6.0(英文)。

要从命令行升级项目,请使用 Visual J# .NET 编译器 (vjc.exe) 将 Java 小程序编译成托管库,其操作与对 Visual J# .NET 中的其他库所执行的操作相同。

如果只有 .class 文件可供使用,则可以使用 Visual J# 二进制转换器工具 (JbImp.exe) 将二进制文件转换成托管库。

Visual J# .NET 编译器 (vjc.exe) 和 Visual J# 二进制转换器工具 (JbImp.exe) 都可以在 Visual Studio .NET 命令提示符下使用。

将 HTML 页中的 <APPLET> 标记转换成 <OBJECT> 标记

J# 浏览器控件实用程序不支持 <APPLET> 标记,但可以使用 <OBJECT> 标记来运行集成在 Web 页中的 J# 浏览器控件。所有 HTML 页中包含的 <APPLET> 标记都必须转换成 <OBJECT> 标记。

J# 浏览器控件实用程序附带了一个名为“HTML Applet 到 Object 标记转换器”(TagConvert.exe) 的工具。它接受 .htm 文件作为输入,然后将其中的 <APPLET> 标记转换成 <OBJECT> 标记,同时在同一目录下通过添加 .toolbak 扩展名来备份含有 Applet 标记的原始 .htm 文件。

您可以从命令提示符运行此工具:

TagConvert [/restore] [/recurse] <directory/file name>

也可以使用以下命令:

recurse <directory>
从给定的输入目录中递归读取所有 HTML 文件,并将其中的 <APPLET> 标记转换成 <OBJECT> 标记。
restore <filename>
恢复含有 <APPLET> 标记的原始 HTML 文件。输入的文件名应该带有“toolbak”扩展名。

此工具可在 <%windir%>\Microsoft.NET\Framework\v1.1.4322 目录下找到。

  1. 从 Visual Studio .NET® 命令提示符,浏览到包含 HTML 页的目录。此目录很可能是升级后的项目所在的目录。
  2. 对项目中包含 <APPLET> 标记的所有 HTML 页运行 TagConvert.exe。此工具将这些 HTML 页中的 <APPLET> 标记替换为 <OBJECT> 标记。

    例如:

    TagConvert.exe MyPage.html

<APPLET> 标记与 <OBJECT> 标记之间的属性映射如下表所示:

<APPLET> 属性 <OBJECT> 属性
CODE <PARAM NAME=CODE ...>
CODEBASE <PARAM NAME=CODEBASE ...>

该工具将把以下格式的 <APPLET> 标记:

<APPLET
        CODEBASE = codebaseURL
        CODE = appletFile
        WIDTH = pixels
        HEIGHT = pixels
        NAME = appletInstanceName
        ALIGN = alignment
        VSPACE = pixels  HSPACE = pixels
        HSPACE = pixels
        ARCHIVE = archiveList
        ALT = alternateText
>
    <PARAM NAME = attribute1 VALUE = value>
    <PARAM NAME = attribute2 VALUE = value>
     . . .
     alternateHTML
</APPLET>

转换成以下格式的 <OBJECT> 标记:

<OBJECT   
CLASSID="clsid:a399591c-0fd0-41f8-9d25-bd76f632415f"
WIDTH= pixels
HEIGHT= pixels
NAME=browserControlInstanceName
ALIGN= alignment
HSPACE= pixels
VSPACE= pixels
ARCHIVE=archiveFiles
...    
>   
   <PARAM NAME=CODE VALUE=browserControlDLL#packageName.mainClass>
   <PARAM NAME=CODEBASE VALUE=codeBaseURL>
   <PARAM NAME = attribute1 VALUE = value>   
   <PARAM NAME = attribute2 VALUE = value>   
     . . .   
     alternateHTML   
</OBJECT>   

其中:

browserControlDLL
文件的名称,此文件中包括要执行的类。请注意,指定文件名时不能带有扩展名。
packageName.mainClass
扩展了 java.applet.Applet 类、并包含 init 方法的类的名称。请注意,必须指定软件包的名称。
注意:如果文件的名称与 J# 浏览器控件类的完全限定名称相同,则在 CODE 属性中就可以用它来指定文件的名称。例如:
<PARAM NAME=CODE VALUE=MyCalendarControl>

如果文件的名称与 J# 浏览器控件类的完全限定名称不同,则必须指定文件名和类名。文件名和类名必须用 # 分开。例如,如果文件名为 MyControls.dll,J# 浏览器控件类名为 MyCalendarControl,则:

<PARAM NAME=CODE VALUE=MyControls.dll#MyCalendarControl>

尽管该工具会把 <APPLET> 标记转换成 <OBJECT> 标记,但在技术预览版中,建议您还是验证一下标记是否被完全转换。请打开相关的 HTML 文件,并确保 <OBJECT> 标记指向的托管库及其位置都正确无误。

您也可以将以下格式的 <APPLET> 标记:

<APPLET
        CODEBASE = codebaseURL
        CODE = appletFile
....
>
     . . .
</APPLET>

手动更改为以下格式的 <OBJECT>:

<OBJECT   
CLASSID="clsid:a399591c-0fd0-41f8-9d25-bd76f632415f"
....
>   
   <PARAM NAME=CODE VALUE=browserControlDLL#packageName.mainClass>
   <PARAM NAME=CODEBASE VALUE=codeBaseURL>
     . . .
</OBJECT>

部署托管库和升级后的 HTML 页

  • 将托管库和升级后的 HTML 文件部署到 Web 服务器上适当的虚拟目录中,并确保这些库存储在 HTML 页中所指定的位置处。

    J# 浏览器控件中使用的所有资源文件(如图像、音频或数据文件)也需要复制到相应的位置。有关详细信息,请参阅 Upgrading Visual J++ 6.0 Applications That Use Resources(英文)。

打开集成了 J# 浏览器控件的 Web 页

必须先在计算机上安装 J# 控件浏览器实用程序,然后才能运行 J# 浏览器控件。默认情况下,此实用程序不允许最终用户运行集成在 Web 页中的 J# 浏览器控件。当用户浏览到包含这样的控件的 Web 站点时,将会看到以下对话框:

单击“确定”关闭该对话框。J# 浏览器控件不会运行。

运行 Web 页中的 J# 浏览器控件

  • 选中 Allow J# Browser Controls on this page to be run(允许运行本页上的 J# 浏览器控件)复选框,然后单击 OK(确定)。

    当该页被刷新后,J# 浏览器控件就会运行。集成了该控件的 Web 站点将被添加到用户要运行其中的 J# 浏览器控件的站点列表中,而且以后访问此站点时不会再看到此对话框。

查看或修改允许运行 J# 浏览器控件的站点列表

  • 在“控制面板”中,双击 J# Browser Control Security(J# 浏览器控件安全)图标。

    将显示以下对话框:

添加 Web 站点

  • Add this Web site(添加此 Web 站点)框中输入 Web 站点的 URL,然后单击 Add(添加)。

    该 Web 站点的所有子文件夹中的 J# 浏览器控件就都允许运行,并且浏览该 Web 站点中的任何一页都不会出现提示。

    注意:如果在 Add this Web site(添加此 Web 站点)框中只添加了某个虚拟目录,则只允许运行包含在该虚拟目录及其子目录中的 J# 浏览器控件。

从 Intranet 站点运行 J# 浏览器控件

  • 选中 Run J# Browser Controls from Intranet sites(从 Intranet 站点运行 J# 浏览器控件)复选框。

    所有 Intranet 站点上的 J# 浏览器控件就都可以运行,而不会出现任何提示。

升级的 J# 浏览器控件的安全性

当 Java 小程序迁移到 J# 浏览器控件之后,该控件将按照计算机上的 .NET Framework 安全策略提供的权限在 .NET Framework 上运行。例如,如果从公司的 Intranet 上运行控件,该控件将在适用于该 Intranet 区域的安全策略下运行。而如果从本地计算机上运行控件,则该控件将在完全可信的安全策略下运行。

不支持的功能

技术预览版中不支持以下功能:

  • 从 HTML 页中的脚本访问 J# 浏览器控件
  • 从 J# 浏览器控件访问同一页中的其他 J# 浏览器控件

在 Visual Studio .NET 中调试升级的项目

小程序升级后,可以使用 Visual Studio .NET 来调试 J# 浏览器控件。

用 Visual Studio .NET 来调试 J# 浏览器控件

  1. 右击解决方案,然后单击快捷菜单上的 Properties(属性)。

    将显示 Property Pages(属性页)对话框。

  2. 单击 Debug Source Files(调试源文件)选项卡,并将符号路径设置为托管库的 .pdb 文件所在位置的路径。有关详细信息,请参阅 Debugging(英文)。

现在,通过将 Internet Explorer 设置为要使用的可执行程序,并将 URL 作为参数传递给 J# 浏览器控件,就可以调试 J# 浏览器控件库。

设置适当的选项

  1. 右击该项目,然后单击快捷菜单上的 Properties(属性)。

    将显示 Property Pages(属性页)对话框。

  2. 单击 Configuration Properties(配置属性)选项卡,然后单击 Debugging(调试)。
  3. Debug Mode(调试模式)设置为 Program(程序)。
  4. Start Application(启动应用程序)设置为 IEXPLORE.EXE 的路径(例如 C:\Program Files\Internet Explorer\IEXPLORE.EXE)。
  5. Command Line Arguments(命令行参数)设置为集成了 J# 浏览器控件的 .htm 文件的 URL。
  6. 单击 OK(确定)。
  7. 在 J# 浏览器控件代码中设置一般的断点。
  8. Debug(调试)菜单上单击 Start(开始)。

除了将 IEXPLORE.EXE 用作可执行程序来进行调试以外,还可以连接到已经在运行的 Internet Explorer 窗口实例并进行调试。

请参阅

Visual J# .NET 文章(英文)

 

版权所有:UML软件工程组织