准备:
到Apache官网下载Axis的包
http://axis.apache.org/axis/java/releases.html
下载后解压取WEB-INF-->lib下的jar放到项目工程
另外还需要添加activation.jar mail.jar
1. 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache- Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<service name="PersonAction" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="Request"/>
<parameter name="className" value="com.kerryzb.axis.PersonAction"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
3. 编写service类及方法
<pre name="code" class="java">package com.kerryzb.axis;
import java.rmi.Remote;
public class PersonAction implements Remote {
public String getName(String name){
System.out.println(name);
return "person name : "+name;
}
public String getPerson(String name, float high){
String respxml = "<xml version=\"1.0\" encoding=\"UTF-8\"><name>"+name+"</name><high>"+high+"</high></xml>";
System.out.println(respxml);
return respxml;
}
}
#这里写了两个方法,分别是传一个参数和两个参数的写法
4. 在Tomcat中运行这个web工程,然后在客户端浏览器上访问
http://localhost:8080/TestWebService/services/PersonAction?method=getName&name=testname
http://localhost:8080/TestWebService/services/PersonAction?method=getPerson&name=testname&high=180.5
显示如上,WebService的服务端就写成功了。
5. 客户端调用WebService
<pre name="code" class="java">package com.hnisi.axis.client;
import java.io.StringReader;
import java.rmi.RemoteException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
public class CallService {
public static void main(String[] args) throws ServiceException,
RemoteException {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress("http://localhost:8080/TestWebService/services/PersonAction");
call.setOperationName("getPerson");
call.addParameter("name", org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("high", org.apache.axis.Constants.XSD_FLOAT,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
String response = (String) call.invoke(new Object[] { "testname",
180.5f });
System.out.println(response);
parse(response);
call = null;
service = null;
}
public static void parse(String protocolXML) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.parse(new InputSource(
new StringReader(protocolXML)));
Element root = doc.getDocumentElement();
NodeList nodeList = root.getChildNodes();
if (nodeList != null) {
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println(node.getNodeName() + " = "
+ node.getFirstChild().getNodeValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
完整的工程请下载
http://download.csdn.net/detail/kerryzb/9550274