zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/jin20000/p/1374930.html
Copyright © 2011-2022 走看看