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

可以见到如下页面:

508473_3.jpg

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

508473_4.gif

点击“Click to see the WSDL”出现

508473_5.gif

将这页另存为xml文档(我们在使用delphi制作客户端的时候会使用)

508473_6.gif

三.delphi实现Web Service客户端开发

打开delphi新建工程,在form上放置两个edit和两个button,button的name命名为

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

再file->new->other,选择webservice里的WSDL importer

508473_7.gif

在search UDDI..里选择前面我们保存的那个xml文件,点击next最后finish

508473_8.gif

508473_9.gif 

全部保存,我们发现delphi的工程中多了test1.pas

508473_10.gif

打开发现有这样一段接口申明:

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

508473_11.gif

设置属性如图:

508473_12.gif

最后我们可以完成我们的代码了:

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运行程序进行测试

508473_13.gif

508473_14.gif

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML DOM 节点

来自:w3cschool菜鸟教程 在 DOM 中,XML 文档中的每个成分都是一个节点。 DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点。 DOM 是这样规定的: 整个文档是一个文档节点每个 XML 元素是一个元素节点包含在 XML 元素中的文本是…

CentOS系列启动流程和内核原理(5系列,6系列,7系列)

前言,本来让我写博客我是拒绝的然而看见大家都在写,还能不能一起友好的玩耍了? 我要是不写怎能和同大神们一起ZB呢?遂开博客! 一、Linux启动内核文件 1.Linux系统组成 动态视角:内核根文件系统 静态视…

如何在CentOS 5.5上安装Kippo蜜罐

Kippo是一个可交互的SSH蜜罐,旨在记录暴力攻击行为,最重要的是可以记录攻击者的shell交互行为,如果你需要了解有关Kippo更多信息,请访问它的官方网站http://code.google.com/p/kippo/,本教程只教你如何在CentOS 5.5服务…

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下,对比一下普通RNN的表现和LSTM和GRU表现: (1)早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是…

uva10617 - Again Palindrome(dp)

再次回文 输入:标准输入 输出:标准输出 时间限制: 2秒 是palindorme的读取相同的从左边,因为它从右侧的一个或多个字符的序列。例如,Ž,TOT和女士的 回文,但是,ADAM是不是。 给定一个…

java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

用oracle数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考。解决方案一:今天工作时在新建连接的时候遇到…

例题9-6 UVa11400 Lighting System Design(DP)

题意: 看白书 要点: 其他的白书上讲的比较清楚了,状态转移方程为:d[i] min(d[i], d[j] (s[i] - s[j])*bulb[i].c bulb[i].k),有点难以理解的是如果i到j之中有的不进行换比较合理怎么办?但其实这种情况是…

【Silverlight】解决DataTemplate绑定附加属性

本文 Silverlight 版本:4.0。 首先定义数据类型,此文始终使用此定义类型。public class SimpleData : ViewModelBase{private string _text;private int _column, _row;public string Text { get { return _text; } set { _text value; OnPropertyChang…

青春无悔

青春像是一座城,放纵的思想、禁锢的世界总让自己感到如履薄冰,只能踽踽独行在阡陌的途中,我喜欢世界是自由的,我喜欢生活是淡然的,淡然的境界早已挣脱时空的枷锁,穿行在历朝历代,如莲花般盛开在…

java中udi_Java读取.properties配置文件的方法

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是 "键值"的格式,在properties文件中,可以用"#"来作注释&#…

android 中文 api (72) —— BluetoothSocket[蓝牙]

前言 本章内容是 android.bluetooth.BluetoothSocket,为Android蓝牙部分的章节翻译。蓝牙通讯套接字,代表了与远端设备的连接点,使用socket本地程序可以通过inputstream和outputstream与远端程序进行通讯。版本为 Android 2.3 r1,…

Linux常用命令(二)

19. 文件压缩命令 (1)。gzip [文件名]  压缩后的文件格式是.gz   只能压缩文件不能压缩目录 不保留源文件 (2)。gunzip [文件名]  解压缩命令 (3)。tar 选项[cvf] [目录]  打包目录  压缩后的文件…

五行代码终极完美解决从IE6到Chrome所有浏览器的position:fixed;以及闪动问题

这个方法其实已经使用很久了,之前主要在嵌入式WebQQ等产品中用过,现在拿出来分享一下吧,是目前最简洁的方式来实现ie6的position:fixed; 失效bug,以及的其他方法的闪动问题,CSS代码如下,很简单,…

致年轻开发人员的一封信

我收到了很多年轻开发人员写给我的邮件,希望可以提升自己的编程能力。我肯定不是第一个讨论这个话题的人,所以我不确定还可以说出什么新意。然而,这里我认为还是非常值得列出我认为很重要的几点吧。 要跟其他开发者一起工作。我们正处在科技史…

笔记整理之 SHELL 变量

变量的类型:1.自定义变量定义变量: 变量名变量值 变量名必须以字母或下划线开头,区分大小写 url1test.3glong.com 引用变量: $变量名 或 ${变量名} 查看变量: echo $变量名 set(所有变量:包括自定…

Node的异步与java的异步_node.js和异步编程回文

以下代码不是异步的&#xff0c;为什么以及如何制作呢&#xff1f;function compute(callback){for(var i 0; i < 1000 ; i){}callback(i);}我将假设你的代码试图说&#xff0c;“我需要做1000次&#xff0c;然后在一切都完成时使用我的回调” .即使你的for循环也不会在这里…

N个三角形分割平面个数(数学)

一个三角形的时候&#xff0c;再加一个三角形&#xff0c;每一条变会与第一个三角形的两条边相交&#xff0c;这样增加2个小三角形&#xff0c;即两个面。f(2)3*2f(1)&#xff0c;再加一个三角形&#xff0c;每一条边会与前两个三角形的四条边相交&#xff0c;形成四个小三角形…

2011年9月19日 面试重点:asp.net运行原理和生命周期

面试重点&#xff1a;asp.net运行原理和生命周期1、ispostback回调机制isPostBackfalse !IsPostBackture 当前页面是第一次加载IsPostBack 由于用户交互(page.submit())提交页面而产生的加载,二次加载html客户端代码将ispostback值存放在viewstate隐藏字段中<input type&quo…

redis——集群

2019独角兽企业重金招聘Python工程师标准>>> 现实中redis需要若干台redis服务器的支持&#xff1a; &#xff08;1&#xff09;从结构上&#xff0c;单个Redis服务器会产生单点故障&#xff0c;同时一台服务器需要承受所有的请求负载。这就需要为数据生成多个副本并…

queue java 用法_Java队列(Queue)用法

Java 实例 - 队列(Queue)用法队列是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;而在表的后端进行插入操作。LinkedList类实现了Queue接口&#xff0c;因此我们可以把LinkedList当成Queue来用。以下实例演示了队列(Queue)的用法&#xff1a;Main.j…