加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webService简介

发布时间:2020-12-16 22:49:52 所属栏目:安全 来源:网络整理
导读:? ? webService简介 一、WebService概念 1、如何调用另外一台机器上的java程序 客户端:--调用个service的哪个方法,传参数 ? ? ? ? ?helloService.sayHello#name#666 2、使用中的WebService实现---使用@WebService及Endpoint ,,Java1.6_20以后的版本 A、发

??webService简介


一、WebService概念

1、如何调用另外一台机器上的java程序


客户端:-->调用个service的哪个方法,传参数

? ? ? ? ?helloService.sayHello#name#666


2、使用中的WebService实现---使用@WebService及Endpoint ,,Java1.6_20以后的版本


A、发布一个WebService


@WebService

public class HelloWorld {


?public String sayHello(String name){

? ?System.out.println(name+"调了SayHello!");


? ?return name+"早上好,现在时间是:"+new Date();

?}


}


public static void main(String[] args) {


? ?Endpoint.publish("http://localhost:9999/hello",new HelloWorld());

? ?System.out.println("服务器已启动!");

?}


B、查看wsdl结果--服务描述语言,描述我们所发布的服务的详细信息

http://localhost:9999/hello?wsdl


C、wsimport 生成Java客户端调用WebService的源代码(只需要一个wsdl文件即可)


wsimport -s . http://localhost:9999/hello?wsdl


D、在java客户端调用WebService


public static void main(String[] args) {

?//通过HelloWorldService来获得一个连接到HelloWorld这个Web服务的实例

?HelloWorld hello= new HelloWorldService().getHelloWorldPort();


?String ret= hello.sayHello("test");


?System.out.println("结果:"+ret);

}



3、基于Java1.6_20以前的版本来发布WebService


/**

* 基于JDK1.6_20以前的版本,在标注WebService的时候,写的注解更加详尽一点

* @author Administrator

*

*/

@WebService(targetNamespace="http://localhost:999/myservice")

@SOAPBinding(style=Style.RPC)//只支持RPC的消息风格

public class Service2 {

?@WebMethod

?public String test(String msg) {

? ?System.out.println(msg);

? ?return msg + " form the Server!";

?}

}



4、小结

WebService叫Web服务--基于Web(htttp)协议提供的一种服务。是可以跨平台跨语言调用。他会以一个URI暴露出去。

广义的WebService,所有在Web服务器中运行的应用,只要能通过一个uri来访问,都可以认为是一个WebService.

标准的WebService,是使用WSDL语言来描述调用的接口信息,基于SOAP协议(基于XMl协议)来传递调用的信息的一种Web应用.

xml+wsdl+soap


学习websrvice的内容


A、webService的服务器端如何编程实现.

(1)、直接JAVA中自带的Endpoint.publish()来发布;

(2)、在web应用中嵌入webservice服务器(其实是web服务器中的一个应用,专门用来处理webservice请求的)。



B、如何去调用别人的WebService

(1)、直接使用wsimport来生成java的客户端.

(2)、自己写程序发送http请求,发送符合SOAP协议的请求体去调用webService。

(3)、利用等三方框架




二、WebService调用通信细节


1、WebService调的过程


A、第一次请求

GET /hello?wsdl HTTP/1.1

User-Agent: Java/1.6.0_10

Host: localhost

Accept: text/html,image/gif,image/jpeg,*; q=.2,*/*; q=.2

Connection: keep-alive


B、第一次请求的响应

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: text/xml;charset="utf-8"



<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://itcast.gz/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://itcast.gz/" name="HelloWorldService">

<types>

<xsd:schema>

<xsd:import namespace="http://itcast.gz/" schemaLocation="http://localhost/hello?xsd=1"></xsd:import>

</xsd:schema>

</types>

<message name="sayHello">

<part name="parameters" element="tns:sayHello"></part>

</message>

<message name="sayHelloResponse">

<part name="parameters" element="tns:sayHelloResponse"></part>

</message>

<portType name="HelloWorld">

<operation name="sayHello">

<input message="tns:sayHello"></input>

<output message="tns:sayHelloResponse"></output>

</operation>

</portType>

<binding name="HelloWorldPortBinding" type="tns:HelloWorld">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>

<operation name="sayHello">

<soap:operation soapAction=""></soap:operation>

<input>

<soap:body use="literal"></soap:body>

</input>

<output>

<soap:body use="literal"></soap:body>

</output>

</operation>

</binding>

<service name="HelloWorldService">

<port name="HelloWorldPort" binding="tns:HelloWorldPortBinding">

<soap:address location="http://localhost/hello"></soap:address>

</port>

</service>

</definitions>



C、第二次请求

发送的是POST请求,并且有请求体,请求体中的内容Content-Type是text/xml; charset=utf-8。请求体是一个基于SOAP协议的确xml文档。


POST /hello HTTP/1.1

SOAPAction: ""

Accept: text/xml,multipart/related,text/html,*/*; q=.2

Content-Type: text/xml; charset=utf-8

User-Agent: Java/1.6.0_10

Host: localhost

Connection: keep-alive

Content-Length: 194


<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:sayHello xmlns:ns2="http://itcast.gz/"><arg0>itcast</arg0></ns2:sayHello></S:Body></S:Envelope>



D、第二次响应,响应的也是xml文件,XMl文件的内容就是调用结果,是基于SOAP协议封装的xml文档。

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: text/xml;charset="utf-8"


5e

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body>

b2

<ns2:sayHelloResponse xmlns:ns2="http://itcast.gz/"><return>itcast早上好,现在时间是:Sun Jan 15 14:35:33 CST 2012</return></ns2:sayHelloResponse></S:Body></S:Envelope>



三、熟悉wsdl


三、熟悉wsdl

1、wsdl语法简介


2、webservice注解

WebService的注解包括:


@WebService-定义服务--定义服务的总体信息,比如有哪些protType,服务的名称,服务的类型等等。


@WebMethod-定义方法---定义方法的名称以及是否作为webService发布出去


@WebResult-定义返回值--


@WebParam-定义参数--定义方法调用参数的名称等信息。


3、WebService客户端代码简化


public class ClientTest {


?/**

? * @param args

? */

?public static void main(String[] args)throws Exception {

? ?URL url = new URL("http://localhost:9999/hello?wsdl");

? ?//根据服务器端wsdl文件,创建一个客户端Service组件,相当于引用服务器webservice

? ?Service service= Service.create(url,new QName("http://itcast.gz/","HelloWorld2Service"));

? ?//getPort是从WebService服务中获得一个组件(port)

? ?HelloWorld2 hs= ?service.getPort(new QName("http://itcast.gz/","HelloWorld2Port"),HelloWorld2.class);

? ?//运行即可

? ?String ret=hs.sayHello("ddd");

? ?System.out.println("返回的结果:"+ret);


?}


@WebService(name = "HelloWorld2",targetNamespace = "http://sanfy.cn/")

@XmlSeeAlso({


})

public interface HelloWorld2 {



? ?/**

? ? *

? ? * @param arg0

? ? * @return

? ? * ? ? returns java.lang.String

? ? */

? ?@WebMethod

? ?@WebResult(targetNamespace = "")

? ?@RequestWrapper(localName = "sayHello",targetNamespace = "http://sanfy.cn/",className = "cn.sanfy.SayHello")

? ?@ResponseWrapper(localName = "sayHelloResponse",className = "cn.sanfy.SayHelloResponse")

? ?public String sayHello(

? ? ? ?@WebParam(name = "arg0",targetNamespace = "")

? ? ? ?String arg0);


}



四、SOAP协议简介


1编程访问WebService

public static void main(String[] args) throws Exception {


? ?URL url=new URL("http://localhost:9999/hello");


? ?HttpURLConnection conn=(HttpURLConnection)url.openConnection();


? ?conn.setDoOutput(true);

? ?conn.setRequestMethod("POST");

? ?//设置请求头信息

? ?conn.setRequestProperty("SOAPAction:","");

? ?conn.setRequestProperty("Accept","text/xml,*/*; q=.2");

? ?conn.setRequestProperty("Content-Type","text/xml; charset=utf-8");


? ?OutputStream out= conn.getOutputStream();

? ?out.write("<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:listUsers xmlns:ns2="http://baidu.com"/></S:Body></S:Envelope>".getBytes());

? ?out.close();

? ?System.out.println("调用得到的结果:");

? ?BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));

? ?String line=null;

? ?while((line=br.readLine())!=null){

? ? ?System.out.println(line+"rn");

? ?}

? ?br.close();

?}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读