自己动手做Java webservice.docx

上传人:b****2 文档编号:24154573 上传时间:2023-05-24 格式:DOCX 页数:8 大小:19.01KB
下载 相关 举报
自己动手做Java webservice.docx_第1页
第1页 / 共8页
自己动手做Java webservice.docx_第2页
第2页 / 共8页
自己动手做Java webservice.docx_第3页
第3页 / 共8页
自己动手做Java webservice.docx_第4页
第4页 / 共8页
自己动手做Java webservice.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

自己动手做Java webservice.docx

《自己动手做Java webservice.docx》由会员分享,可在线阅读,更多相关《自己动手做Java webservice.docx(8页珍藏版)》请在冰豆网上搜索。

自己动手做Java webservice.docx

自己动手做Javawebservice

以前因为公司只用websphere,所以也就只对websphere略有了解。

只把它当做工具,也没充分了解。

忽一日知道有些模样的网站都在自己做webservice,就花了一些时间学习了一下。

班门弄斧,抛砖引玉吧。

因为web的Http服务实际上就是请求和响应的交互,即service和client端的交互。

先建服务器端目录:

webService

服务器端的类HelloWorld.java

importjavax.jws.WebMethod;

importjavax.jws.WebParam;

importjavax.jws.WebResult;

importjavax.jws.WebService;

importjavax.jws.soap.SOAPBinding;

@WebService(targetNamespace="")

@SOAPBinding(style=SOAPBinding.Style.RPC)

publicclassHelloWorld{

   @WebMethod(action="toSayHello",operationName="toSayHello",exclude=false)

   @WebResult(name="returnWord")//自定荵芽?

?

方法返回蛟?

在WSDL中相蜈?

的描述

   publicStringsayHello(@WebParam(name="userName")StringuserName){

       return"Hello:

"+userName;

   }

   @WebMethod

   publicintgetExp(inti,intj){

       returni/j;

   }

   //wsgen-cp./bin-r./wsdl-s./src-d./bin-wsdlatest.webService.HelloWorld

}

当前目录下面编译一下:

javacHelloWorld.java

建3个目录:

src,bin,wsdl

执行以下命令行语句:

wsgen-cp./-r./wsdl-s./src-d./bin-wsdlHelloWorld

编写StartService.java(webservice启动器)

importjavax.xml.ws.Endpoint;

 

publicclassStartService{

   publicstaticvoidmain(String[]args){

       Endpoint.publish("http:

//localhost:

8080/webservice/hws",newHelloWorld());

   }

}

编译javacStartService.java

启动服务:

javaStartService

1:

可以用jconsole查看服务是否启动。

2:

也可以在浏览器地址栏中输入:

http:

//localhost:

8080/webservice/hws

  会显示:

WebServices

NoJAX-WScontextinformationavailable.

3:

http:

//localhost:

8080/webservice/hws?

wsdl

   如果一个XML文件显示,OK,已经启动。

服务器,其实已经做好了。

简单吧。

下面做客户端:

建客户端目录client,当然也可以换台机器来做,更形象。

重新用cmd起一个命令行容器。

同样建3个目录:

src,bin,wsdl

wsimport -d ./bin -s ./src-pclient http:

//localhost:

8080/webservice/hws?

wsdl

parsingWSDL...

generatingcode...

compilingcode...

chf@

会生成2个文件:

HelloWorld.java  HelloWorldService.java

移到client根目录下。

编译一下。

编写文件:

ClientRun.java

publicclassClientRun{

 

   /**

     *@paramargs

    */

   publicstaticvoidmain(String[]args){

       HelloWorldServicehws=newHelloWorldService();

       HelloWorldhw=hws.getHelloWorldPort();

       System.out.println(hw.getExp(9,3));

       System.out.println(hw.toSayHello("hiyachen"));

   }

 

}编译javacClientRun.java

运行:

javaClientRun

以下结果就OK了.

3

Hello:

hiyachen

环境:

JDK6,soap1.1,wsdl,annotation

webservice其实也不难,再用上java的servlet类,就可以编出个tomcat了。

加上socket的 

Socketclient=newSocket("127.0.01.",80); //客户端向port:

80发送请求

ServerSocketserver=newServerSocket(80);//服务器监听port:

80的请求。

关于webservice的一些词汇和注视的解释,请读:

自己动手做一个WebService

(2)

本文只对一些概念做些说明,使用例子请参照:

自己动手做一个WebService

(1)

什么是WebServices

Webservice 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。

这就是说,你能够用编程的方法通过Web来调用这个应用程序。

基于浏览器的瘦客户应用程序,即BS结构,是目前流行的,使得WebServices的应用越来越广泛。

WebServices 是一种构建应用程序的模型,并能在所有支持 Internet 通讯的操作系统上实施运行。

WebServices 令基于组件的开发和 Web 的结合达到最佳,基于组件的对象模型,利用 SOAP 和 XML对这些模型在通讯方面作了进一步的扩展以消除特殊对象模型的障碍。

因为是使用XML作为传输的介质,所以可以跨平台跨语言。

WebServices 实现远程访问,有点类似RMI(远程方法调用)。

但它是利用 HTTP 和 SOAP 协议是商业数据在 Web 上传输,SOAP通过 HTTP 调用商业对象执行远程功能调用,Web 用户能够使用 SOAP 和 HTTP通过 Web调用的方法来调用远程对象。

WebServices 结构

客户根据 WSDL描述文档,会生成一个 SOAP 请求消息。

WebServices 都是放在Web服务器上面,客户生成的SOAP请求会被嵌入在一个HTTPPOST请求中,发送到 Web 服务器来。

Web 服务器再把这些请求转发给 WebServices 请求处理器。

请求处理器的作用在于,解析收到的 SOAP 请求,调用 WebServices,然后再生成相应的 SOAP 应答。

Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。

什么是WSDL

WSDL是Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。

WebServices服务器把一个对像绑定到一个URL 上(如http:

//localhost:

8080/webservices/hello),客户端就可以能过绑定的地址(如:

http:

//localhost:

8080/webservices/hello?

wsdl)取得WSDL文件,该文件是标准的XML 格式,描述了被绑定对像的信息,包括可调用的方法,参数,及参数类型,返回值类型,异常类型等。

客户端就是通过这些信息调用服务器的方法。

什么是SOAP

简单对象访问协议(simpleobjectaccessprotocol)

特点:

1、http传输协议。

2:

请求-响应。

3:

基于XML。

4客户端与web服务间信息传递。

二、JKD6 对WebServices的支持

JDK6提供了对WebService原生的支持,对WebService进行了完美的封装,完全隐藏了底层内容,甚至可以不用了解wsdl的具体规范。

使用WebService就像使用本地方法一样简单。

下面来举个例子,依然从最简单的HelloWorld入手。

HelloWorld例子

STEP1,服务器端Bean说明

服务器端的Java类若要成为一个实现了WebService的bean,它需要遵循下边这些原则:

这个类必须是public类、不能是final的或者abstract、必须有一个公共的默认构造函数、绝对不能有finalize()方法。

若要成为一个实现了WebService的Bean的方法必须遵循这些原则:

这个方法必须是public,它的参数、返回值、和异常在每个JAXRPC规范中都描述了Java转化成XML/WSDL映射文件的规则,参数和返回值可以是原始类型、数组等等。

 

JKD6 中定义的WebService注释

 

1.       @WebService 标注要暴露为Web Services的类或接口 ,用于申修饰类或接口,包含属性

targetNamespace 定义命名空间,默认为”http:

//”+”包名倒排”

name WebService 的名称,默认为类名,例如:

//service.jws.test/"

name="HelloWorldService">

portName WebService 的端口名称

serviceName WebService 的服务名称,例如

                 

binding="tns:

HelloWorldPortBinding">

      ...

                 

           

wsdlLocation描述服务的预定义WSDL 的位置  

endpointInterface定义服务抽象WebService 协定的服务端点接口的完整名称    

2.       @SOAPBinding 定义WebService 在SOAP中的消息协议,用于申修饰类或接口,包含属性

style 定义消息的编码类型

user 定义消息的格式化类型

3.       @WebMethod 定义WebService运作的方法,包含属性

action 操作的活动

operationName与此方法匹配的 wsdl:

operation 的名称

exclude 标注此方法是否被暴露,默认为false

4.       @WebResult 定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性

name返回值的名称

partName表示此返回值的 wsdl:

part 的名称

targetNamespace返回值的 XML 名称空间

header如果为 true,则结果是从消息头而不是消息正文获取的

5.       @WebParam 定义方法的参数,参数类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性

name参数名称

partName表示此参数的 wsdl:

part 的名称

targetNamespace参数的 XML 名称空间

header如果为 true,则结果是从消息头而不是消息正文获取的

mode参数的流向(IN、OUT 或 INOUT 之一)

 

wsgen与wsimport命令说明

wsgen命令的主要功能是用来生成合适的JAX-WS。

它读取WebService的终端类文件,在我们的例子中就是test.jws.service.HelloWorld,同时生成所有用于发布WebService所依赖的源代码文件和经过编译过的二进制类文件,通常WebServiceBean中用到的异常类会另外生成一个描述Bean。

它还能生成WSDL和符合规范的HelloWorld类WebService。

wsgen从资源文件生成一个完整的操作列表并验证是合法的。

如果WebServiceBean中的主法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。

命令参数说明:

-cp 定义classpath

-r 生成 bean的wsdl文件的存放目录

-s 生成发布WebService的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)

-d 生成发布WebService的编译过的二进制类文件的存放目录(该异常的描述类的class文件)

 

      wsimport命令的主要功能是根据wsdl文件生成客户端存根及框架,负责与WebService 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。

命令参数说明:

-d 生成客户端执行类的class文件的存放目录

-s 生成客户端执行类的源文件的存放目录

-p 定义生成类的包名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1