一步一步开始WebSercie(详解HelloWorld程序)

来源:互联网 发布:贪吃飒淘宝小店网址 编辑:程序博客网 时间:2024/05/29 07:00

 

 1.前言

这篇博客主要讲解第一个WebService例子,一步一步的来搭建第一个WebService实例,并且来分析一下有关WegbService的基础知识。


 2.WebService

2.1 什么是WebService

百度解释

WebService是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言的下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

小编理解

根据字面上意思翻译为网络服务,可见就是一种服务。用来跨平台服务。举个例子来说,世界上有很多种语言,那么各种语言之间如何进行交流呢?我们可以借助第三方翻译工具,那么在这里这个工具就相当WebService;还比如,现在的天气预报,要使用这个功能的话,只需要调用服务即可。


2.2 基础知识

XML( Extensible Markup Language):扩展性标记语言

既然WebService作为一种服务来提供,那么如何来描述这种服务呢?就是通过XML来进行描述

WSDL(WebServiceDescription Language ):Web服务描述语言

就是通过XML形式来说明服务在什么地方,提供了什么样的方法,如何调用等信息

SOAP(SimpleObject Access Protocol):简单对象访问协议

用于网上的传输数据,我们所知道的有HTTP协议,其中HTTP协议是基于超文本的传输请求,即text\html,其中又划分为get和post请求,最大的区别也就是传递参数。而SOAP协议正是在HTTP基础上,通过XML来进行传输数据。其中SOAP的组成元素如下

Envelope – 必须的部分。以XML的根元素出现。

        Headers– 可选的。

                Body– 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。


 3.搭建HelloWorld程序

3.1 建立Java Project

 创建一个普通的HelloWorld类,如下

<span style="font-family:Comic Sans MS;font-size:18px;">package com.tgb;import javax.jws.WebService;@WebServicepublic class HelloWorld {public void sayHello(){System.out.println("Hello---------");}public String outString(String name,String age){return name;}}</span>

其中@WebService是一个注解,用在类上指定将类发布成一个WebService服务


3.2 发布HelloWorld服务

创建一个testHelloService类,用来发布服务,如下

<span style="font-family:Comic Sans MS;font-size:18px;">package com.tgb;import javax.xml.ws.Endpoint;public class testHelloService {public static void main(String[] args) {//端点服务类,用来发布服务Endpoint.publish("http://192.168.24.202:8080/hello", new HelloWorld());}}</span>

其中Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。

static Endpoint.publish(String address,Object implementor) 在给定地址处针对指定的实现者对象创建并发布端点。stop方法用于停止服务。

其他注意事项:

1)      给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。

2)      如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。

3)      如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

4)      服务类中不能没有方法

5)      @WebMethod(exclude=true)屏蔽方法


3.3 运行程序

程序运行后,我们的服务就发布了,在浏览器中输入地址http://192.168.24.202:8080/hello?wsdl,来通过XML来查看服务的相关信息。



我们把上述的信息,划分了几种类型,如下所示




关于具体的方法参数的描述,我们可以在http://192.168.24.202:8080/hello?xsd=1中,看到方法的schema约束信息


3.4 wsimport生成客户端代码

如果我们要在客户端调用的话,就需要根据服务地址来生成相应的客户端代码,而wsimport是jdk自带的,可以根据wsdl文档来生成客户端代码,常用参数如下

-d<目录>  - 将生成.class文件。默认参数。

•   -s<目录>  -将生成.java文件和class文件。

•    -p<生成的新包名> -将生成的类,放于指定的包下。

•    (wsdlurl) - http://server:port/service?wsdl,必须的参数。



上述中-s后面的.代表的是当前目录,-p后面的com.test代表的生成的目录结构,如果不指定的话,将会自动根据服务生成,最后面的是服务的地址


3.5 客户端调用

在上面的步骤中,生成客户端代码后,直接拷贝到我们的项目中,调用即可,此时我们创建一个testclient类,如下

<span style="font-family:Comic Sans MS;font-size:18px;">package com.tgb;import wsd.tgb.HelloWorldService;public class testclient { public static void main(String[] args) {//创建服务点集合HelloWorldService helloWorldService=new HelloWorldService();//生成服务后,调用服务方法即可helloWorldService.getHelloWorldPort().sayHello();}}</span>

以上就会调用我们发布的服务

0 0
原创粉丝点击