天天看點

Delphi和Java實作webservice架構

Delphi和Java實作webservice架構

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所配置一緻)。

    可以見到如下頁面:

Delphi和Java實作webservice架構

    二.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可以看到

Delphi和Java實作webservice架構

    點選“Click to see the WSDL”出現

Delphi和Java實作webservice架構

    将這頁另存為xml文檔(我們在使用delphi制作用戶端的時候會使用)

Delphi和Java實作webservice架構

    三.delphi實作Web Service用戶端開發

    打開delphi建立工程,在form上放置兩個edit和兩個button,button的name命名為

btnadd和btnsubtract,caption命名為add和subtract。

    再file->new->other,選擇webservice裡的WSDL importer

Delphi和Java實作webservice架構

    在search UDDI..裡選擇前面我們儲存的那個xml檔案,點選next最後finish

Delphi和Java實作webservice架構
Delphi和Java實作webservice架構

    全部儲存,我們發現delphi的工程中多了test1.pas

Delphi和Java實作webservice架構

    打開發現有這樣一段接口申明:

      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上。

Delphi和Java實作webservice架構

設定屬性如圖:

Delphi和Java實作webservice架構

最後我們可以完成我們的代碼了:

    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實作webservice架構
Delphi和Java實作webservice架構

    看我們有用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

[附件下載下傳]

Delphi和Java實作webservice架構

訪客: