维护项目中看到一个这样的一个应用,jsp页面中嵌入一个ocx的控件,然后通过用户在控件上
的条件查询并将数据发送到服务器端进行处理,并将处理后的结果返回给控件(注:ocx是delphi
制作的)。
问题来了!控件和服务器间如何交互的。查了一下,两种方式。一种是将数据提交通过js以文本或
字符串的形式传递给服务器,这种方式比较简单,但有限制。第二中就是我将要整理的,通过
soap(simple object access protocol)使客户端可以访问服务端提供的接口(对象,数据,方法等);
好下面来详细介绍一下步骤:
先声明一下:我下面说的是客户端也是java,其实客户端可以是很多形式,如Activex,ocx,vb,delphi等
1.环境的搭建;
jdk的安装
Tomcat的安装
Eclipse的安装与配置
网上有很多教程没有使用Eclipse,当然开始脱离IDE工具是有好处的,你可以了解很多其他的东西,但
对于一些不太熟悉java批编译的朋友来说是个问题,我就遇到了这个问题,所以选择了Eclipse作为辅助
编译的工具.
2.webservice所使用的jar包的准备
官方网站可以下载:http://ws.apache.org/axis/
我使用的是:axis-src-1_4.zip
主要使用axis-src-1_4.zip下面的lib中的jar包
包括:axis.jar;axis-ant.jar;commons-discovery.jar;commons-logging.jar;jaxrpc.jar
log4j-1.2.4.jar;saaj.jar;wsdl4j.jar;
3.将axis-src-1_4.zip解压并将其webapps目录下的axis工程拷贝到你的Tomcat/webapps目录下
4.启动Tomcat
5.打开浏览器输入http://localhost:8080/axis观察(注意端口问题)
进入validate链接并进行检查Needed Components下是否都能找到相应的jar如果回答是否
则注意添加相应的jar 我添加了activation.jar;
观察optional components 如果不存在mail.jar ;xmlsec-1.4.0.jar添加
mail.jar,xmlsec-1.4.0.jar到Tomcat/common/lib目录下;
再一次输入地址测试直到完成;
6.准备java小程序
原码为:
public class Hello{
public String hello(String name){
if(name==null)
name = "";
return "你好"+name+",欢迎来到Web服务的世界!";
}
}
7.将上面的java小程序重命名为Hello.jws保存到Tomcat/webapps/axis/目录下;该文件就是
被用作服务器端的文件;
8.在cmd下使用指令使用指令:
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
指令后面的地址是你得到wsdl的地址;
9.查看Tomcat/webapps/axis/WEB_INF/目录下是否生成响应的文件夹“localhost”
我生成有四个java文件分别是
Hello.java;
HelloService.java;
HelloServiceLocator.java;
HelloSoapBindingStub.java;
10.生成的这四个文件就是我们客户端将来要用到的.
11.在Eclipse下建立一个新的java工程,接下来导入相应的jar包并在src目录下建立相应
的包,包下面就是我们上面生成的java文件,这写文件都为客户端所用.
12.一切准备工作就绪,下面就是写一个测试小程序看运行效果了;程序如下:
public Class HelloClientTest{
public static void main(String[] args) throws Exception{
HelloService service = new HelloServiceLocator();
Hello hello = service.getHello();
System.out.println("Response:"+hello.hello("罐头"));
}
}
注意该文件是放在和HelloService.java等文件的同一个包下面的;
运行程序,如果在控制台有"你好罐头,欢迎来的web服务的世界! "字样表明成功
注意,下载包的过程中最好都去官方网站去下载,因为其他一些提供下载的地方包中的
内容可能别一些程序员改动了,但使用者并不知道,所以提醒大家注意。
还有一点需要提醒的是我是在本地模拟测试的,有条件的可以使用两台机测试一下,其实没什么不同的,唯一不同的就是把localhost换成你的目标机器的ip地址.