web services 入门:献给所有好学的新手

antzl 2005-04-22 05:16:40
本文给出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);
}

}



...全文
500 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoxuefeng 2005-04-28
  • 打赏
  • 举报
回复
请教一下楼主这个问题
http://community.csdn.net/Expert/topic/3967/3967581.xml?temp=.6400415
马行空牛耕田 2005-04-27
  • 打赏
  • 举报
回复
NoClassDefFoundError表明你的classpath中没有这个class,你检查一下你的j2ee.jar包有没有加进classpath!
conquer2004 2005-04-27
  • 打赏
  • 举报
回复
感谢
qingzhuang 2005-04-27
  • 打赏
  • 举报
回复
有空看看
antzl 2005-04-26
  • 打赏
  • 举报
回复
楼上那位提问的朋友,非常抱歉不能回答你的问题,因为最近实在很忙,希望来这里的朋友们能够互相帮助解决问题,共同提高,谢谢大家。
wangbolong 2005-04-26
  • 打赏
  • 举报
回复
支持!昨晚参考楼主的文章做了一个.
sword323 2005-04-25
  • 打赏
  • 举报
回复
我按文章试了一遍.怎么出现下面异常阿?
哪位成功试过吗?

Exception in thread "main" java.lang.NoClassDefFoundError: javax/wsdl/OperationT
ype
at org.apache.axis.description.OperationDesc.<clinit>(OperationDesc.java
:58)
at org.apache.axis.client.Call.addParameter(Call.java:948)
at org.apache.axis.client.Call.addParameter(Call.java:983)
at BankClient.main(BankClient.java:29)

laoji 2005-04-25
  • 打赏
  • 举报
回复
up
sword323 2005-04-25
  • 打赏
  • 举报
回复
非常感谢
aaassd 2005-04-22
  • 打赏
  • 举报
回复
感谢,感谢。
antzl 2005-04-22
  • 打赏
  • 举报
回复
最后在zl_homework3文件夹下建文件:bank.txt
内容为:
0.0
用于程序中保存中间数据。
antzl 2005-04-22
  • 打赏
  • 举报
回复
/*
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>
antzl 2005-04-22
  • 打赏
  • 举报
回复
/*
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

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧