分享
 
 
 

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

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

在Visual J++中编写ASP 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对象的注册一样。

对于使用Visual J++早期版本的用户,编译.java文件的方法也类似,但还需要额外的注册步骤,即使用JavaReg /register 命令注册该类。

三、编写ASP脚本

测试FetchURL的ASP代码非常简单: < %

Set objFetchURL = Server.CreateObject("FetchURL.FetchURL")

strResponse = objFetchURL.Fetch("http://www.chinabyte.com/")

Response.Write(strResponse)

Set objFetchURL = Nothing

% >

这段代码首先创建FetchURL的实例,创建方法和其他COM对象的创建方法一样。然后,程序调用Fetch方法,将结果字符串返回给客户浏览器。保存上述脚本为Test.asp,然而用类如“http://localhost/scripts/Test.asp”的URL打开它,就可以看到结果了。如下图所示:

【图2】

以上我们介绍了在Visual J++中开发ASP COM组件的具体过程。对于ASP应用来说,Java以网络为中心所提供的许多功能是Visual Basic所缺乏的,如果代码有可能要在不同的平台下重用,更值得认真考虑Java;此外,我们还看到,即使是使用Visual J++,我们仍旧没有使用Microsoft的私有Java扩展,在Visual J++中完全可以写出能够用其他Java编译器编译的Java代码。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有