
Delphi和Java實作webservice架構
Webservice現在已經不是什麼新技術了,用java建立webservice是快捷的,但是用java在制作用戶端的感覺上總是不如 Delphi的(個人感覺,java高手們不要笑話我),那我們就用java實作webservice的服務端程式,delphi制作用戶端。
一.環境搭建
jdk和tomcat的安裝和配置我在這裡不進行行介紹了。說明一點我的tomcat是安裝在D:\tomcat,設定端口是8099。
安裝Axis
1.可以從http://ws.apache.org/axis/下載下傳axis的最新版本,我使用的是axis1.2。
2.解壓縮axis-bin-1_2beta.zip,将axis-1_2beta目錄中webapps下的axis目錄全部拷貝到tomcat的安裝目錄中webapps下。
3.将axis\lib中的所有jar檔案都添加到classpath系統變量中。
注(使用者需根據自己的安裝路徑進行更改):
.;
d:\tomcat\webapps\axis\WEBINF\lib\axis.jar;
d:\tomcat\webapps\axis\WEB-INF\lib\saaj.jar;
d:\tomcat\webapps\axis\WEB-INF\lib\commons-logging.jar;
d:\tomcat\webapps\axis\WEB-INF\lib\commons-discovery.jar;
d:\tomcat\webapps\axis\WEB-INF\lib\wsdl4j.jar;
d:\tomcat\webapps\axis\WEBINF\lib\jaxrpc.jar;
4.啟動tomcat通路http://cbf107:8099/axis/index.html(這裡使用的主機名和端口号和使用的tomcat所配置一緻)。
可以見到如下頁面:
二.Web Service服務端開發
寫一個java小程式:
public class Test{
public int add(int p1, int p2) {
return p1 + p2;
}
public int subtract(int p1, int p2) {
return p1 - p2;
}
}
在D:\Tomcat\webapps\axis 目錄下建立一個test檔案夾,将它儲存在裡面,注意:字尾名改為jws,也就是Test.jws 。
在浏覽器裡通路:http://cbf107:8099/axis/test/Test.jws可以看到
點選“Click to see the WSDL”出現
将這頁另存為xml文檔(我們在使用delphi制作用戶端的時候會使用)
三.delphi實作Web Service用戶端開發
打開delphi建立工程,在form上放置兩個edit和兩個button,button的name命名為
btnadd和btnsubtract,caption命名為add和subtract。
再file->new->other,選擇webservice裡的WSDL importer
在search UDDI..裡選擇前面我們儲存的那個xml檔案,點選next最後finish
全部儲存,我們發現delphi的工程中多了test1.pas
打開發現有這樣一段接口申明:
Test = interface(IInvokable)
['{52882FF0-46E2-6644-A77B-CE714D4CBFD5}']
function add(const p1: Integer; const p2: Integer): Integer; stdcall;
function subtract(const p1: Integer; const p2: Integer): Integer; stdcall;
end;
那我們可以直接調用這個接口了,這時候我們回到界面,從delphi的webservices面版中托放一個soap到form上。
設定屬性如圖:
最後我們可以完成我們的代碼了:
1.在uses裡添加test1因為我們要引用這個單元。
2.添加全局變量t1:test;(t1是一個test接口)
3.為兩個button添加click事件
procedure TForm1.btnaddClick(Sender: TObject);
var
i,j,z:integer;
begin
i:=strtoint(edit1.Text);
j:=strtoint(edit2.Text);
t1:=(HttPRIO1 as test);
z:=t1.add(i,j);
t1._Release;
showmessage(inttostr(z));
end;
procedure TForm1.btnsubstractClick(Sender: TObject);
var
i,j,z:integer;
begin
i:=strtoint(edit1.Text);
j:=strtoint(edit2.Text);
t1:=(HttPRIO1 as test);
z:=t1.subtract(i,j);
t1._Release;
showmessage(inttostr(z));
end;
4.F9運作程式進行測試
看我們有用delphi實作了java寫的那段程式,不是嗎。
5.也許到這裡你認為應該已經完成了,沒錯!不過對webservice還不夠了解的
朋友你再修改一下那個java程式,也就是将Test.jws裡的這個方法
public int add(int p1, int p2) {
return p1 + p2;
}
改為
public int add(int p1, int p2) {
return p1 + p2+10;
}
再運作一下你的用戶端程式看看。
四.注:unit1的所有代碼
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Rio, SOAPHTTPClient,Test1;
type
TForm1 = class(TForm)
HTTPRIO1: THTTPRIO;
Edit1: TEdit;
Edit2: TEdit;
btnadd: TButton;
btnsubstract: TButton;
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure btnaddClick(Sender: TObject);
procedure btnsubstractClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t1:test;
implementation
{$R *.dfm}
//這裡是為了讓 兩個edit隻能輸入數字,edit1的onkeypress直接調用這個就可以了。
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key in ['0'..'9']=false then
key:=#0;
end;
procedure TForm1.btnaddClick(Sender: TObject);
var
i,j,z:integer;
begin
i:=strtoint(edit1.Text);
j:=strtoint(edit2.Text);
t1:=(HttPRIO1 as test);
z:=t1.add(i,j);
t1._Release;
showmessage(inttostr(z));
end;
procedure TForm1.btnsubstractClick(Sender: TObject);
var
i,j,z:integer;
begin
i:=strtoint(edit1.Text);
j:=strtoint(edit2.Text);
t1:=(HttPRIO1 as test);
z:=t1.subtract(i,j);
t1._Release;
showmessage(inttostr(z));
end;
end.
對使用axis搭建webservice有興趣的朋友還有可以通路這裡:
http://www-900.ibm.com/developerWorks/cn/webservices/ws-startaxis/
我在大學的畢業設計使用了webservice,大家有興趣可以看看
http://www.cbf107.com/CBF107Items.aspx?RefId=65ab72d7-d21b-3000-4025-93b782eafc1e
[附件下載下傳]
訪客:
|
|