本文给出web services的一个简单的例子介绍:
一、 环境配置说明
1、首先,安装JDK 1.4.2
2、安装Tomcat5于G:/Program Files/Apache Software Foundation/Tomcat 5.0 端口:8081
3、下载开源项目Axis,将axis-1_1-src.jar 解压缩到当前目录,将/axis-1_1/webapps/目录中的文件夹axis拷贝到G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/目录下。
4、设置classpath:
首先如下添加环境变量:
AXIS_HOME=G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/axis
AXIS_LIB=%AXIS_HOME%/WEB-INF/lib
然后在环境变量classpath中添加:
%AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery.jar;
%AXIS_LIB%/commons-logging.jar;%AXIS_LIB%/jaxrpc.jar;%AXIS_LIB%/saaj.jar;
%AXIS_LIB%/log4j-1.2.8.jar;%AXIS_LIB%/xml-apis.jar;%AXIS_LIB%/xercesImpl.jar
二:程序及编译说明
1、首先,在G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/axis/目录下,创建一个文件夹:zl_homework3
2、在上述文件夹中,编写服务器端程序BankServer.java,客户端程序BankClient.java,完成后,编译BankServer.java、BankClient.java。(源程序见后文)
3、创建服务发布描述文件deploy.wsdd。(见后文)
4、启动tomcat服务器,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布,新建一个dos窗口,进入当前目录G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/axis/zl_homework3,输入命令,
格式如下:
java org.apache.axis.client.AdminClient -lhttp://localhost:8081/axis/services/AdminService deploy.wsdd
可以看到以下运行结果:
Processing file deploy.wsdd
<Admin>Doneprocessing</Admin>
这表明Capacity服务定制发布完成。
5将BankServer.class文件拷贝到G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/axis/WEB-INF/classes目录中。
6重新启动服务器,通过访问http://localhost:8081/axis/services/BankServer?wsdl可以看到这个服务的WSDL描述文件,这说明BankServer服务被成功发布了。
7运行客户端程序,新建一个dos窗口,进入当前目录G:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/axis/zl_homework3,输入命令,
格式如下:
java BankClient
则可显示运行结果。
/*
BankServer.java
*/
import java.io.*;
public class BankServer
{
double total=0.0;
public double deposite(double dep)
{
try{
//定义一个BufferdReader对象,用于读取文件
BufferedReader br = new BufferedReader(new FileReader("G://Program Files//Apache Software Foundation//Tomcat 5.0//webapps//axis//zl_homework3//bank.txt"));
String line="";
//将读取的字符串赋值给line
line = br.readLine();
//将line中的字符串转化为Double型数据
total=Double.parseDouble(line);
//进行存款操作
total=total+dep;
//将total转化为字符串后,赋给line
line=String.valueOf(total);
//定义一个BufferedWriter对象,用于写文件
BufferedWriter bw = new BufferedWriter(new FileWriter("G://Program Files//Apache Software Foundation//Tomcat 5.0//webapps//axis//zl_homework3//bank.txt",false));
//将结果写于文件中
bw.write(line);
bw.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
return total;
}
public double withdraw(double wit)
{
try{
//定义一个BufferdReader对象,用于读取文件
BufferedReader br = new BufferedReader(new FileReader("G://Program Files//Apache Software Foundation//Tomcat 5.0//webapps//axis//zl_homework3//bank.txt"));
String line="";
//将读取的字符串赋值给line
line = br.readLine();
//将line中的字符串转化为Double型数据
total=Double.parseDouble(line);
//进行取款操作
total=total-wit;
//将total转化为字符串后,赋给line
line=String.valueOf(total);
//定义一个BufferedWriter对象,用于写文件
BufferedWriter bw = new BufferedWriter(new FileWriter("G://Program Files//Apache Software Foundation//Tomcat 5.0//webapps//axis//zl_homework3//bank.txt",false));
//将结果写于文件中
bw.write(line);
bw.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
return total;
}
public static void main(String args[])
{
BankServer bs=new BankServer();
double result=0.0;
result=bs.deposite(1000);
System.out.println(result);
result=bs.withdraw(2000);
System.out.println(result);
}
}
/*
BankClient.java
*/
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
public class BankClient
{
public static void main( String[] args ) throws Exception
{
for(int i=1;i<=3;i++)
{
Service service_dep = new Service();
Call call_dep = ( Call ) service_dep.createCall();
//访问即时发布的BankServer服务,进行存款操作
//设置访问点
call_dep.setTargetEndpointAddress( "http://localhost:8081/axis/services/BankServer" );
//设置操作名
call_dep.setOperationName( "deposite" );
//设置入口参数
call_dep.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
call_dep.setReturnType( XMLType.XSD_DOUBLE );
int dep_val=(int)(Math.random()*10000.0);
Double dep = new Double( dep_val );
//调用服务
System.out.println( "存款"+dep + " 元,您的余额为 " +call_dep.invoke( new Object[]{dep} ) + " 元" );
Service service_wit = new Service();
Call call_wit= ( Call ) service_wit.createCall();
//访问即时发布的BankServer服务,进行取款操作
//设置访问点
call_wit.setTargetEndpointAddress( "http://localhost:8081/axis/services/BankServer" );
//设置操作名
call_wit.setOperationName( "withdraw" );
//设置入口参数
call_wit.addParameter( "op2", XMLType.XSD_DOUBLE, ParameterMode.IN );
call_wit.setReturnType( XMLType.XSD_DOUBLE );
int wit_val=(int)(Math.random()*5000);
Double wit = new Double( wit_val );
//调用服务
Double return_val=(Double)call_wit.invoke( new Object[]{wit} );
System.out.println( "取款"+wit + " 元,您的余额为 " +return_val + " 元" );
}
}//end main
}//end BankClient
/*
deploy.wsdd
*/
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="BankServer" provider="java:RPC">
<parameter name="className" value="BankServer"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
最后在zl_homework3文件夹下建文件:bank.txt
内容为:
0.0
用于程序中保存中间数据。