下载Apache Axis用来实现SOAP(简单对象访问协议)。http://ws.apache.org/axis/
目前最稳定的版本是1.1
SOAP是用于在分散的或者分布式的环境中交换信息的一个轻量级协议。SOAP基于XML,由三部分组成:一个必须的SOAP封装,一个可选的SOAP头和一个必须的SOAP体。
通常情况下,SOAP = HTTP + RPC + XML。 即:SOAP以HTTP作为底层通信协议,以RPC作为交互方式,以XML作为数据传送的格式。
Web Service开发所需要掌握的技能:
JAVA,线程,同步,Classloader,错误排除,知道NPE(NullPointerException)和其他一些常见的错误,并能够处理,Servlet,如何发布Web 应用到应用服务器(Tomcat等)
TCP/IP,socket API,XML...多得吓人啊!要学习啊:(
1 安装配置Axis
~~安装Tomcat 4.X以上版本(4.X后的版本都带XML的解析器)
~~解压Axis1.1.zip包,找到webapps目录下的axis文件夹,拷贝axis文件夹到Tomcat中的webapps文件夹下。
~~将Tomcat中的axis目录下的WEB-INF\lib中的所有的文件copy到Tomcat的common\lib目录中。(以后凡是要在axis的lib中添加jar文件,都要copy一份到Tomcat的common\lib目录下)。
~~我的电脑->属性->高级->环境变量->系统变量中添加:
AXIS_HOME
%TOMCAT_HOME%\webapps\axis(TOMCAT的目录)
AXIS_LIB
%AXIS_HOME%\lib
AXISCLASSPATH
%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
修改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
注意检查CLASSPATH是否正确:(有些软件会在用户变量区设置一个classpath,会有影响,如:XMLSPY)
在DOS方式下
输命令:Echo %CLASSPATH%
~~检查配置:
启动Tomcat,访问http://localhost:8080/axis/,
验证axis的是否工作:http://localhost:8080/axis/happyaxis.jsp如果正常显示表示正常。
上图中 倒数第3行字“The core axis libra….”,要保证core axis libraries are present,如果有任何core library is missing,就到其提供的相应的链接上找到对应的jar文件,并copy到tomcat目录里面的axis文件夹WEB-INF\lib中,别忘了Tomcat自己的common\lib也copy一份。
直到所有的core library are present.
好啦基本上都配置好了。现在我们开始做一个有点模样的web Service的例子啦。一步一步来:)
目标:模拟一个银行存取款系统,存取款的具体实现作为服务来提供
Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。
1. 使用即时发布 Java Web Service(JWS)
“对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。”
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到Tomcat下面的webapps\axis目录下即可。但是JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
就是不好罗,但是我们还是来看一个例子:大家在Tomcat的webapps\axis下找到Calculate.jws文件,然后打开看看。不用编译的。
发布吧:http://localhost:8080/axis/Distance.jws?wsdl 如果你看到下面的WSDL描述表示你已经发布成功啦:
怎么使用这个服务呢?大家到
Tomcat 5.0\webapps\axis\WEB-INF\classes\samples\userguide\example2
里面是不是看到一个CalcClient.class的文件啊?这个文件就是对应的axis提供的calculate的客户端的例子。在dos方式,到Tomcat 5.0\webapps\axis\WEB-INF\classes\目录下:
java samples.userguide.example2.CalcClient add 3 4
是不是得到7了啊?如果出现NoDefClass的错误的话就用echo检查各个环境变量吧。一般都错在这里。
Calculator对应的源代码在下载的axis.zip里面的samples\userguide\example2里面。
2. 使用定制发布 Web Service Deployment Descriptor(WSDD)
“即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。”
好啦 到我们啦,我先不说定制发布有什么好,大家先往下看,自然会有体会的:)
首先给出我们的模拟银行存取款的java文件:
Account.java
package com.duckur;
public class? Account
{
/*************************************************************
/*从随机数中获取帐户(一次性有效)*/
public static int fund = (int)(java.lang.Math.random()*10000);
//模拟,大家可以从文件中读取数据,或者从数据库中取出这个fund值
/*************************************************************
/*检查输入的有效性*/
public boolean checkInput(int money)//只能取整数
{
if(money > fund)
{
return false;
}
else
{
return true;
}
}
/*************************************************************
/*存款*/
public int deposit(int money)
{
fund? = fund + money;
return fund;
}
/*************************************************************
/*取款*/
public int withdraw(int money)
{
if(checkInput(money))
{
fund = fund - money;
}
return fund;
}
/*************************************************************
/*获取当前的帐户值*/
public int getAccount()
{
return fund;
}
}
然后编译,通过后生成的class文件应该放在Tomcat下的webapps\axis\WEB-INF\com\duckur\下面。
下面发布:
在Tomcat下的webapps\axis\WEB-INF\com\duckur\目录下新建一个deploy.wsdd文件描述服务的名称、入口等信息:
本文地址:http://com.8s8s.com/it/it16267.htm