第一次见到webservice时,懵,懵,懵,它是什么?主要功能是什么?怎么用?围绕着这些开始webservice学习之旅java
webService是一种跨编程语言和跨操做系统平台的远程调用技术;
采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪一个方法,传递的参数是什么,以及服务对象的返回结果是什么)。
好比,咱们的应用上须要用到天气信息,咱们能够调用互联网上查询天气的web服务,这样用户就能够在咱们的网站上看到天气信息, 咱们也能够把本身写好的代码发布,这样别人也能够调用;
webservice分为服务端(发布服务)和客户端(调用服务)两部分; web
这篇文章用Jdk发布一个WebService服务及调用,下一篇介绍如何使用框架cxf发布webservice;
发布须知:
@WebService注解(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)- 编程
经过EndPoint(端点服务类)发布一个WebService 浏览器
WSDL(web service definition language)框架
发布服务:
1.建立webProject
2.建立类,加上@WebService注解
3.在类中定义你要发布的方法编程语言
@WebService
public class SayWeb {
public String sayHello(String name){
return "hello"+name;
}
public void sayBye(){
System.out.println("bye");
}
/** * 添加@WebMethod(exclude=true)注解 * */
@WebMethod(exclude=true)
public int sayInt(int i){
return ++i;
}
/** * 静态方法 * */
public static void sayGood(){
System.out.println("Good");
}
/** * main方法中发布 * */
public static void main(String[] args) {
String address="http://localhost:9001/service/sayweb";
Endpoint.publish(address, new SayWeb());
System.out.println("发布成功");
}
}
4.发布webservice
5.在浏览器中搜索发布的地址
6.wsdl文档
svg
生成代码方式调用服务 :
第一种:
jdk文件中bin文件里面有一个wsimport.exe应用程序,是用来给客户端生成调用代码的
1.新建webprogect,做为客户端
2.打开cmd命令 输入
wsimport -s E:\workspace\client\src -p com.client -keep http://localhost:9001/service/sayweb?wsdl
-keep:表示生成客户端代码,url为wsdl文档的地址
-p:表示生成的代码所放的包名
-s:表示生成源码(直接调用),src目录
出现如下代码,表示生成代码成功,
parsing WSDL…
Generating code…
Compiling code…
3.刷新项目,看到在指定包下生成调用源码
4.编写测试方法,调用代码学习
public static void main(String[] args) {
//获取工厂 wsdl文档:<service name="SayWebService">
SayWebService swb=new SayWebService();
//获取服务端口上的对象 wsdl文档:<port name="SayWebPort" binding="tns:SayWebPortBinding">
SayWeb sw=swb.getSayWebPort();
sw.sayBye();
System.out.println(sw.sayHello("nihao"));
}
第二种:
1.单击项目右键—->new—–>web service client
2.输入wsdl文档地址—>finish
3.自动生成java代码,主要使用的是***Locator和****Stub
4.测试测试
public static void main(String[] args) {
try {
SayWebServiceLocator swst=new SayWebServiceLocator();
java.net.URL url=new java.net.URL("http://localhost:9001/service/sayweb?wsdl");
SayWebPortBindingStub stub=new SayWebPortBindingStub(url,swst);
stub.sayBye();
System.out.println(stub.sayHello("nihao"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
测试结果网站
服务端:
客户端
总结:
1.发布服务端除了在main方法中,还能够在servlet容器初始化时,还能够放在监听器中等
2.使用wsimport命令的方式调用webservice,在实际项目中,并不推荐,由于要生成不少java代码文件,若是服务端更改,须要从新生成代码文件,不过使用jdk去发布webservice简单易于操做,只为更好的理解web服务的调用。在后面文章中着重介绍cxf框架以及如何调用如天气等免费的web服务