电竞比分网-中国电竞赛事及体育赛事平台

分享

Delphi和Java實(shí)現(xiàn)webservice架構(gòu)

 jimmylin88cn 2007-05-19


  Webservice現(xiàn)在已經(jīng)不是什么新技術(shù)了,用java建立webservice是快捷的,但是用java在制作客戶(hù)端的感覺(jué)上總是不如 Delphi的(個(gè)人感覺(jué),java高手們不要笑話(huà)我),那我們就用java實(shí)現(xiàn)webservice的服務(wù)端程序,delphi制作客戶(hù)端。
   
    一.環(huán)境搭建
    
    jdk和tomcat的安裝和配置我在這里不進(jìn)行行介紹了。說(shuō)明一點(diǎn)我的tomcat是安裝在D:\tomcat,設(shè)定端口是8099。

 


    安裝Axis
     1.可以從http://ws./axis/下載axis的最新版本,我使用的是axis1.2。
     2.解壓縮axis-bin-1_2beta.zip,將axis-1_2beta目錄中webapps下的axis目錄全部拷貝到tomcat的安裝目錄中webapps下。
     3.將axis\lib中的所有jar文件都添加到classpath系統(tǒng)變量中。

     注(用戶(hù)需根據(jù)自己的安裝路徑進(jìn)行更改):
     
      .;
      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.啟動(dòng)tomcat訪(fǎng)問(wèn)http://cbf107:8099/axis/index.html(這里使用的主機(jī)名和端口號(hào)和使用的tomcat所配置一致)。
    可以見(jiàn)到如下頁(yè)面:

      

    二.Web Service服務(wù)端開(kāi)發(fā)
  
    寫(xiě)一個(gè)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 目錄下新建一個(gè)test文件夾,將它保存在里面,注意:后綴名改為jws,也就是Test.jws 。
  
    在瀏覽器里訪(fǎng)問(wèn):http://cbf107:8099/axis/test/Test.jws可以看到

     

    點(diǎn)擊“Click to see the WSDL”出現(xiàn)

    
 
    將這頁(yè)另存為xml文檔(我們?cè)谑褂胐elphi制作客戶(hù)端的時(shí)候會(huì)使用)

     

    三.delphi實(shí)現(xiàn)Web Service客戶(hù)端開(kāi)發(fā)

    打開(kāi)delphi新建工程,在form上放置兩個(gè)edit和兩個(gè)button,button的name命名為
btnadd和btnsubtract,caption命名為add和subtract。

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

    

    在search UDDI..里選擇前面我們保存的那個(gè)xml文件,點(diǎn)擊next最后finish

        

     
    
    全部保存,我們發(fā)現(xiàn)delphi的工程中多了test1.pas
   
     

    打開(kāi)發(fā)現(xiàn)有這樣一段接口申明:
      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;
    
    那我們可以直接調(diào)用這個(gè)接口了,這時(shí)候我們回到界面,從delphi的webservices面版中托放一個(gè)soap到form上。

     

設(shè)置屬性如圖:

     

最后我們可以完成我們的代碼了:
    1.在uses里添加test1因?yàn)槲覀円眠@個(gè)單元。
    2.添加全局變量t1:test;(t1是一個(gè)test接口)
    3.為兩個(gè)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運(yùn)行程序進(jìn)行測(cè)試
    
     

     

    看我們有用delphi實(shí)現(xiàn)了java寫(xiě)的那段程序,不是嗎。

    5.也許到這里你認(rèn)為應(yīng)該已經(jīng)完成了,沒(méi)錯(cuò)!不過(guò)對(duì)webservice還不夠了解的
  朋友你再修改一下那個(gè)java程序,也就是將Test.jws里的這個(gè)方法 

      public int add(int p1, int p2) {
        return p1 + p2;
      }

      改為

      public int add(int p1, int p2) {
        return p1 + p2+10;
      }

    再運(yùn)行一下你的客戶(hù)端程序看看。

    四.注: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}


    //這里是為了讓 兩個(gè)edit只能輸入數(shù)字,edit1的onkeypress直接調(diào)用這個(gè)就可以了。
    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.

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多