Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
Web Service的关键技术和规则:
1.XML:描述数据的标准方法.
2.SOAP:表示信息交换的协议(简单对象访问协议). 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。简单地说:SOAP 是用于访问网络服务的协议。
3.WSDL:Web服务描述语言.是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问
4.UDDI:通用描述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描述商务的协议。
发布服务实现的几种方式
一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:
创建一个web项目,并新建一个class类,发布使用:
HelloService.java
package com.web.service; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.Endpoint; /* * 基于jdk1.6以上的javax.jws 发布webservice接口 @WebService - 它是一个注解,用在类上指定将此类发布成一个ws。 Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解 对象绑定到一个地址的端口上。 * * */ @WebService public class HelloService { // 供客户端调用方法 该方法是非静态的,会被发布 public String say(String name) { return "hello"+name; } public String say2(String name){ return "你好! "+name; } // 方法上加@WebMentod(exclude=true)后,此方法不被发布; @WebMethod(exclude=true) public String getHello(String name){ return "你好! "+name; } // 静态方法不会被发布 public static String staMethod(String name) { return "静态方法"+name; } public static void main(String[] args) { //发布时提供地址及 服务的类 Endpoint.publish("http://localhost:8080/Service/ServiceHello", new HelloService()); System.out.println("成功发布"); //发布成功后 在浏览器输入 http://localhost:8080/Service/ServiceHello?wsdl 就可以访问 } } |
编译运行即开启服务,访问地址http://localhost:8080/Service/ServiceHello?wsdl就能看到相应的wsdl(xml格式)即发布成功
二、使用eclipse自带web service 服务发布 axis
创建一个web项目级一个要发布的类
右击这个项目,new -> other->web services->webservice
选择需要暴露的实现,service.HelloService,然后选择发布
选择要发布的方法
点击start server
我们是通过tomcat发布的,直接start即可。常用的框架有,cxf、 axis、 axis2等,这里选择了axis
之后在项目中找到wsdl文件
文件最后部分找到访问地址
在该地址后面加?wsdl 即http://localhost:8080/web_service/services/HelloService?wsdl就可以访问
建立client端
一、使用eclipse自带
新建一个java工程(都可以)
输入wsdl地址即访问地址,finish即可
然后可以看到目录下的Webservice java类,
我们新建一个test,去测试以下
- package test;
- import java.rmi.RemoteException;
- import service.HelloService;
- import service.HelloServiceProxy;
- public class Test {
- public static void main(String[] args) throws RemoteException {
- HelloServiceProxy helloPxy = new HelloServiceProxy();
- HelloService service = helloPxy.getHelloService();
- String res = service.say("yyf");
- System.out.println(res);
- }
- }
客户端超时断开连接设置:
HelloServiceSoapBindingStub->
protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {_call.setTimeout(1000);//设置超时时间
.......
}
二、使用命令方式生成java文件
1.创建Web Service Project,命名为TheClient。2.在dos命令下输入 wsimport -s “src目录” -p “生成类所在包名” -keep “wsdl发布地址”
例:
wsimport -s E:\eclipse\webClient\src -p com.web.service -keep http://localhost:8080/web_service/services/HelloService?wsdl
测试时这样写的 与上一个方式的不一样,client端生成的java文件随使用的方法框架不同而不同,建议使用一个就可以了。
public class Test { public static void main(String[] args) throws RemoteException { HelloService service=new HelloServiceService().getHelloService(); System.out.println(service.say("我不哦")); System.out.println(service.say2("我要哦")); System.out.println(service.staMethod("静态使用")); } } |