在Visual J++中编写ASP COM组件(转)

visual

Java是一种以网络为中心的编程语言,许多只使用ASP脚本难以完成的任务可以用Java轻松地实现。同时,扩展ASP应用最好的方法莫过于加入COM组件。那么,可以利用Java为ASP开发组件吗?本文通过实例,说明了在Visual J++环境下开发COM组件的具体过程。
一、概述

   自Java问世以来,各种开发工具、开发环境不断出现。这些环境和工具面向不同层次的用户,具有各自的优点。那么,使用Visual J++作为Java开发平台又有哪些优点呢?粗略地讲,这些优点包括:

熟悉的开发环境。Microsoft的许多开发工具,在风格、使用方法上都非常相似。熟悉Visual Basic和Visual C++开发环境的用户很快可以学会Visual J++的使用。
与其他开发环境的协作。例如,Visual J++可以与Visual InterDev无缝协作,所有HTML、ASP和JavaScript代码的编写均可以在同样的环境内完成。
调试器。使用集成开发环境(IDE)最显著的优点之一在于可以使用内置的调试器。与所有其他Microsoft开发环境一样,Visual J++的调试器功能也非常强大。
当然,Visual J++的IDE也具有其他许多优点,比如关键词彩色显示、代码自动格式化、应用结构全局视图等等。
   特别地,对于那些在Java门外跃跃欲试,却又不知从何开始的开发者,我们认为Visual J++是一个非常好的起点。然而我们知道,Sun和Microsoft曾经因为后者对Java的“扩展”而发生争议。不管我们是否把Java类封装成COM对象,Java程序都是扩展ASP应用的一种好方法。但考虑到Microsoft私有的扩展不可能得到所有Java平台或环境的支持,因此,在Visual J++编程中应当慎重考虑是否使用Microsoft的Java扩展。

   接下来我们将用Visual J++创建一个可用于ASP环境的组件。这个组件只包含一个方法,它的参数是字符串URL,功能是提取并返回由URL指定的HTML文档的内容。

   本文将逐步介绍整个组件开发过程。包括如何在Visual J++中创建工程,输入必要的Java代码并解释这些Java代码的作用,以及如何在ASP脚本内应用这个组件。

   注意:本文将使用Visual J++ 6.0,但也可以使用更早版本的Visual J++,必要的时候我们会指出不同版本之间的差异。

   二、创建Visual J++工程

   启动Visual J++,出现如下对话框:

  

                     【图1】

   在这个对话框中选择新建工程,输入这个工程的名字FetchURL以及合适的工作目录,然后选择COM DLL图标,最后单击“打开”按钮。

   Visual J++将自动为新建工程创建一个Java文件,名为Class1.java。在Project Explorer窗格,双击工程名字,按右键,然后将Class1.java改名为FetchURL.java。双击FetchURL.java文件名即可看到文件内容。FetchURL.java中由Visual J++自动加入的代码是创建ASP组件必需的骨架代码,内容如下:

 /**
  * This class is designed to be packaged with a COM DLL output format.
  * The class has no standard entry points, other than the constructor.
  * Public methods will be exposed as methods on the default COM interface.
  * @com.register ( clsid=600455A0-B534-11D3-A434-0080AD38C188,
  * typelib=600455A1-B534-11D3-A434-0080AD38C188 )
 */
 public class Class1
 {
    // TODO: Add additional methods and code here
 
    /**
     * NOTE: To add auto-registration code, refer to the documentation
     * on the following method
     *   public static void onCOMRegister(boolean unRegister) {}
     */
 }
   首先要做的是更改类的名字,即把内容为“public class Class1”的行改为“public class FetchURL”。Java要求每一个类的名字与其对应的Java文件名完全相同(大小写敏感)。

   请注意上述代码中的COM指令,它由“@com.register”开始(在注释内)。该指令告诉Visual J++编译器把当前Java类包装成相应的COM DLL文件。将编译后的代码以DLL形式包装使得我们可以在ASP脚本中直接使用它。

   接下来,我们要修改自动生成的初始代码,使其具备前面提出的功能。完整的代码工程见本文后面的链接,此处我们依次介绍所输入代码的含义。

 import java.io.*;
 import java.net.*;
   这两行代码导入了本组件要用到的Java包。Java API由一系列的包组成,这些包提供的是直接可以使用的代码,类似于C++中的库。在Java程序中使用import关键字有点类似于在C++程序中使用#include命令。

   要查看所导入的包定义了哪些类,可以在Class Outline窗格内扩展相应的目录。FetchURL将利用java.io包中定义的类从打开的网络连接读入数据,利用java.net包提供的类建立与远程服务器的连接并请求文档。

 public String Fetch(String strURL)
   FetchURL包含唯一的方法Fetch,它的参数是一个字符串,该字符串指向要求提取的HTML文档的URL。

 String strInputLine = new String();
 String strResponse = new String();
 try
 {
 URL objURL = new URL(strURL);
 try
 {
 URLConnection objConnection = objURL.openConnection();
   变量strInputLine将作为程序从远程服务器读取数据的缓冲区,变量strResponse将保存目标页面的整个文档,Fetch方法最后返回的就是这个strResponse变量。在这几行代码中,程序创建了一个URL对象并尝试用该对象建立连接。这两行代码都封装在try...catch块内以处理任何可能出现的异常。Java利用“异常”来处理任何程序遇到的例外情况(通常是错误)。例如,如果传递给Fetch方法的URL参数格式错误,或程序运行时未能与指定服务器建立连接,都会引发异常,此时程序将把异常信息返回给调用Fetch方法的应用。异常处理代码见相应的catch关键字。

 BufferedReader objInReader = new BufferedReader(
 new InputStreamReader(
 objConnection.getInputStream()));
   这一行代码有点复杂,所以在完全搞懂它的意思之前先不要着急。在这行代码中,程序利用了象Java这样完全面向对象编程语言所提供的优势。首先,它用objConnection对象创建了一个InputStream类的对象,这实际上是一个可以从服务器读取数据的流;然后,又把这个InputStream类的对象传递给InputStreamReader,后者将负责从InputStream对象读取数据;最后,又用这个InputStreamReader类的对象创建BufferedReader类的对象,也就是objInReader。程序将利用这个objInReader对象完成实际的数据读取操作,并将结果保存为一个字符串。

 while ((strInputLine = objInReader.readLine()) != null)
 strResponse += strInputLine + "
";
 objInReader.close();
   在这部分代码中,程序使用了一个while循环读入所有数据,直至输入为空(null)。objInReader是一个BufferedReader类的对象,它将缓冲读入的字符,整块地返回给strInputLine变量。然后,又把这个strInputLine和一个“ ”加到strResponse的末尾。“ ”是Java的一个转义字符,表示一个新的文本行。在读入目标文档的所有内容后,程序调用objInReader对象的close()方法显式地关闭输入流。

   在所有代码输入完毕之后就可以编译这个FetchURL工程了。Visual J++不仅将从Java源文件生成通常的类文件,还将生成一个DLL文件。这个DLL文件封装了Java类文件,它使得我们可以从任何COM环境(包括ASP)访问Java类文件所提供的功能。

   如果使用Visual J++ 6,将.java文件编译成.class文件和相应的.dll文件很简单,只需从Build菜单选择Build命令就可以了。如果测试FetchURL.dll的机器和编译是同一台计算机,则不需要任何附加的工作了;如果不在同一台机器上,则还需要在测试机器上用regsvr32 FetchURL.dll命令注册它,就像其他COM对象的注册一样。

时间: 2024-09-23 20:20:43

在Visual J++中编写ASP COM组件(转)的相关文章

在Visual J++中编写ASP COM组件

visual Java是一种以网络为中心的编程语言,许多只使用ASP脚本难以完成的任务可以用Java轻松地实现.同时,扩展ASP应用最好的方法莫过于加入COM组件.那么,可以利用Java为ASP开发组件吗?本文通过实例,说明了在Visual J++环境下开发COM组件的具体过程. 一.概述 自Java问世以来,各种开发工具.开发环境不断出现.这些环境和工具面向不同层次的用户,具有各自的优点.那么,使用Visual J++作为Java开发平台又有哪些优点呢?粗略地讲,这些优点包括: 熟悉的开发环境

在windows 2003 server中编写asp代码需要注意的地方

server|window 在windows 2003 server中编写asp代码,你可能会碰到下面的错误提示"不允许的父路径",涉及到的代码有: Server.MapPath(../)<!--#include file="../"--> 等.可能是出于安全考虑吧,微软屏蔽了脚本中对父路径的访问,但这可能会给我们的编程带来麻烦,尤其是原有asp的代码升级的时候.幸好,这个设置是可以关闭的,具体在下面这个地方IIS管理器中,在你的虚拟路径上点右键,属性,

visual stu...-使用c++语言如何在visual studio 中编写可视化窗口程序

问题描述 使用c++语言如何在visual studio 中编写可视化窗口程序 使用c++语言如何在visual studio 中编写可视化窗口程序? 解决方案 就可以创建MFC 程序 剩下的就是代码实现功能的问题了 解决方案二: 最简单的已经使用MFC工程向导,你也可以手动写代码做Win32的基本程序结构. 解决方案三: 最简单的方法是用对话框当窗口用,在资源视图里可以创建对话框,代码里直接一句DialogBox()就行,对话框上可以直接托控件上去,非常方便.而且不用一些专门的软件,比如spy

【翻译】在Visual Studio中使用Asp.Net Core MVC创建第一个Web Api应用(二)

运行应用 In Visual Studio, press CTRL+F5 to launch the app. Visual Studio launches a browser and navigates to http://localhost:port/api/values, where port is a randomly chosen port number. If you're using Chrome, Edge or Firefox, the data will be display

【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expose services and data. HTTP is simple, flexible, and ubiquitous. Almost any platform that you can think of has an HTTP library, so HTTP services can re

Visual C#中编写多线程程序之起步

visual|程序|多线程 .NET将关于多线程的功能定义在System.Threading名字空间中.因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;). 即使你没有编写多线程应用程序的经验,也可能听说过"启动线程""杀死线程"这些词,其实除了这两个外,涉及多线程方面的还有诸如"暂停线程""优先级""挂起线程""恢复线程"等等.下面将一个一个

C#编写ASP.NET组件

asp.net //访问数据库是每个程序员都想简化的工作,通过组件来完成,新手也变高手... using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Configuration;using System.Data.OracleClient; namespace NetAdo{    public class NetDB    {        private st

在.NET里使用Visual FoxPro资源-vfp编写的COM组件

第二部分:在.NET里使用vfp编写的COM组件 Fox能够灵活.直观.快速处理数据,使得它非常适合应用在业务逻辑层次.从Visual FoxPro 5开始,微软不断加强Visual FoxPro 的COM组件开发上能力.简单归纳一下Visual FoxPro 在COM组件编写的特点: 全新的运行时刻库:VFPnT.DLL(n代表版本号).在这个运行库中,删除了大量老式的和界面控制元素,更小巧.更稳定.更快速. 全新的SESSION对象.在多线程状态下提供很好的隔离性. 内置对XML的支持,方便

ASP脚本组件的特点

脚本     我们应该从正反两方面考虑在工作中使用ASP脚本组件的必要性.与编译的组件比较,ASP脚本组件有一个明显的特点:WSC脚本文件可在任何时候进行编辑,在下一次执行时,组件中的变化可自动反映出来.不需要重新编译,不需重新启动服务器释放现有组件的引用,也不需要重新注册.并且,如果组件工作状态良好,可选用合适的语言,用已证明可靠的代码和/或算法创建一个编译版本,这同样适用于任何可转换组件.    ASP脚本组件可适应COM +.事实上,与其他ASP内置对象一样,这种组件可访问ObjectCo