webservice:

就是应用程序之间跨语言的调用
    wwww.webxml.com.cn
    1.xml
    2.    wsdl: webservice description language web服务描述语言
        通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书
    
    3.soap simple object access protoacl (简单对象访问协议) 
        限定了xml的格式
        soap 在http(因为有请求体,所以必须是post请求)的基础上传输xml数据
            请求和响应的xml 的格式如:    <Envelop>
                                <body>
                                //....
                                </body>
                            </Envelop>
                operation name:服务提供的方法
                
        
    静态方法不能发布为外部服务
    
    运用jkd自带的代码生成访问服务器的客户端代码    E:/wsimort -s . http://test.cm/?wsdl
    
    我们可以把webservice看做是web服务器上的一个应用,web服务器是webservice的一个容器
    
    函数的参数在 http://test.cm/?xsd=1
    
    JAX-WS是指 java api for xml -WebService
    
    //测试 WebService服务的 explorer
    Web Service Explorer 可以显示返回的xml格式
    
    targetNamespace 默认为倒置的包名
    
客户端调用WebService的方式:
    1.通过wximport生成代码
    2.通过客户端编程方式
    3.通过ajax调用方式
    4.通过 URL Connection 方式调用

请求过程分析:
        1.使用get方式获取wsdl文件,称为握手
        2.使用post发出请求
        3.服务器响应成功过

几种监听工具:
    http watch
    Web Service explorer
    eclipse 自带工具   TCP/IP Monitor

    服务端代码:

package com.webservcie;import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;/*** WebService* 将 Java 类标记为实现 Web Service,或者将 Java 接口标记为定义 Web Service 接口*/
@WebService(serviceName="MyService",targetNamespace="http://www.baidu.com")
public class HelloService {@WebMethod(operationName="AliassayHello")@WebResult(name="myReturn")public String sayHello(@WebParam(name="name") String name){return  "hello: " + name;}public String sayGoodbye(String name){return  "goodbye: " + name;}@WebMethod(exclude=true)//当前方法不被发布出去public String sayHello2(String name){return "hello " + name;}public static void main(String[] args) {/*** 参数1:服务的发布地址* 参数2:服务的实现者*  Endpoint  会重新启动一个线程*/Endpoint.publish("http://test.cm/", new HelloService());System.out.println("Server ready...");}}

1.客户端调用(wximport自动生成代码 【推荐】)

package com.wsclient;public class App {/*** 通过wsimport 解析wsdl生成客户端代码调用WebService服务* * @param args* */public static void main(String[] args) {// TODO Auto-generated method stub/*** <service name="MyService">* 获得服务名称*/MyService mywebService = new MyService();/*** <port name="HelloServicePort" binding="tns:HelloServicePortBinding">*/HelloService hs = mywebService.getHelloServicePort();/*** 调用方法*/System.out.println(hs.sayGoodbye("sjk"));System.out.println(hs.aliassayHello("sjk"));}}

 2.通过ajax+js+xml调用

<html><head><title>通过ajax调用WebService服务</title><script>var xhr = new ActiveXObject("Microsoft.XMLHTTP");function sendMsg(){var name = document.getElementById('name').value;//服务的地址var wsUrl = 'http://192.168.1.100:6789/hello';//请求体var soap = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://ws.itcast.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' + ' <soapenv:Body> <q0:sayHello><arg0>'+name+'</arg0>  </q0:sayHello> </soapenv:Body> </soapenv:Envelope>';//打开连接
                xhr.open('POST',wsUrl,true);//重新设置请求头
                xhr.setRequestHeader("Content-Type","text/xml;charset=UTF-8");//设置回调函数
                xhr.onreadystatechange = _back;//发送请求
                xhr.send(soap);}function _back(){if(xhr.readyState == 4){if(xhr.status == 200){//alert('调用Webservice成功了');var ret = xhr.responseXML;var msg = ret.getElementsByTagName('return')[0];document.getElementById('showInfo').innerHTML = msg.text;//alert(msg.text);
                        }}}</script></head><body><input type="button" value="发送SOAP请求" onclick="sendMsg();"><input type="text" id="name"><div id="showInfo"></div></body>
</html>

3.URL Connection方式

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/*** 通过UrlConnection调用Webservice服务**/
public class App {public static void main(String[] args) throws Exception {//服务的地址URL wsUrl = new URL("http://192.168.1.100:6789/hello");HttpURLConnection conn = (HttpURLConnection) wsUrl.openConnection();conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");OutputStream os = conn.getOutputStream();//请求体String soap = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:q0=\"http://ws.itcast.cn/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<soapenv:Body> <q0:sayHello><arg0>aaa</arg0>  </q0:sayHello> </soapenv:Body> </soapenv:Envelope>";os.write(soap.getBytes());InputStream is = conn.getInputStream();byte[] b = new byte[1024];int len = 0;String s = "";while((len = is.read(b)) != -1){String ss = new String(b,0,len,"UTF-8");s += ss;}System.out.println(s);is.close();os.close();conn.disconnect();}
}

4.客户单编程方式(和第一种方式一样)

//文件名:HelloService.javaimport javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;/*** This class was generated by the JAX-WS RI.* JAX-WS RI 2.1.6 in JDK 6* Generated source version: 2.1* */
@WebService(name = "HelloService", targetNamespace = "http://ws.itcast.cn/")
@XmlSeeAlso({})
public interface HelloService {/*** * @param arg0* @return*     returns java.lang.String*/@WebMethod@WebResult(targetNamespace = "")@RequestWrapper(localName = "sayHello", targetNamespace = "http://ws.itcast.cn/", className = "cn.itcast.ws.client.SayHello")@ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "http://ws.itcast.cn/", className = "cn.itcast.ws.client.SayHelloResponse")public String sayHello(@WebParam(name = "arg0", targetNamespace = "")String arg0);}

import java.net.MalformedURLException;
import java.net.URL;import javax.xml.namespace.QName;
import javax.xml.ws.Service;import cn.itcast.ws.wsimport.HelloService;/*** 通过客户端编程的方式调用Webservice服务**/
public class App {public static void main(String[] args) throws Exception {URL wsdlUrl = new URL("http://192.168.1.100:6789/hello?wsdl");Service s = Service.create(wsdlUrl, new QName("http://ws.itcast.cn/","HelloServiceService"));HelloService hs = s.getPort(new QName("http://ws.itcast.cn/","HelloServicePort"), HelloService.class);String ret = hs.sayHello("zhangsan");System.out.println(ret);}
}

java 实现WebService 以及不同的调用方式相关推荐

  1. WebService客户端三种调用方式整理

    1 WebService基础 1.1 作用 1,       WebService是两个系统的远程调用,使两个系统进行数据交互,如应用: 天气预报服务.银行ATM取款.使用邮箱账号登录各网站等. 2, ...

  2. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍(转)

    [-] 一普通同步方式 二事务方式Transactions 三管道Pipelining 四管道中调用事务 五分布式直连同步调用 六分布式直连异步调用 七分布式连接池同步调用 八分布式连接池异步调用 九 ...

  3. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍--转载

    原文地址:http://www.blogways.net/blog/2013/06/02/jedis-demo.html redis是一个著名的key-value存储系统,而作为其官方推荐的java版 ...

  4. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    一.普通同步方式 二.事务方式(Transactions) 三.管道(Pipelining) 四.管道中调用事务 五.分布式直连同步调用 六.分布式直连异步调用 七.分布式连接池同步调用 八.分布式连 ...

  5. vue 调用webservice_c#:WebService及其几种调用方式

    之前做移动端开发,都不清楚WebService是啥东东,现在接触c#,项目中有三处WebService调用,就不得不与其打交道了,最近碰上第三方接口地址更换,而自己项目因功能也需要增加WebServi ...

  6. java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...

  7. 在java中方法的三种调用方式

    在java中方法的调用有三种方式: 先写主代码: public static int sum (int a,iny b){System.out.println("有结果显示");i ...

  8. java 动态调用函数_深入讲解Java语言中的函数动态调用方式

    相 信 有 不 少 人 使 用C 语 言 的 函 数 指 针 实 现 过 函 数 的 动 态 调 用. 适 当 地 运 用 函 数 动 态 调 用 功 能 不 仅 能 减 少 代 码 数 量, 而 且 ...

  9. Java调用.NET webservice方法的几种方式

    最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统(http://vip.cxcod.com/PodApi/GetPodStr.asmx?ws ...

最新文章

  1. python使用笔记:if __name__ == ‘__main__‘ 如何理解
  2. php 检查图片重复度,php – 检测图片的“整体平均”颜色
  3. Linux命令之du命令df命令
  4. Oracle -jdbc-java 的类型映射
  5. VS Code 大佬高效开发插件
  6. Python 为了提升性能,竟运用了共享经济!赶紧看看!!
  7. MFCC梅尔频率倒谱系数
  8. 吴恩达深度学习——深度学习概论
  9. easyui ajax post,实例详解EasyUI框架使用Ajax提交注册信息
  10. 笔记本电脑触摸板操作
  11. 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
  12. Spring 实体类依赖注入属性的三种方式
  13. win10点文件夹转圈圈假死机
  14. python删除指定元素 多个_Python List remove()删除多个元素
  15. android.nfc.tech圈存,微信etc圈存教程:1分钟学会ETC充值圈存
  16. 若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由
  17. 第一次漏洞分析(暴雷漏洞CVE-2012-1889)
  18. 如何对一个顶级域名设置域名解析
  19. 用AutoHotkey写电脑屏幕监控软件
  20. Mongodb 数据库基本操作语句,结合 Node.js + express + mongoose (实现增、删、改、查,批量增加、修改等,创建临时表,多表查询......)

热门文章

  1. JavaScript数组的高级用法-reduce和reduceRight详解
  2. [转]C#操作注册表
  3. SQL:两种获取时间类型日期部分的方法
  4. 介绍一下ajax后最好的返回结果的方式#34;Json#34;
  5. Android学习笔记--文件下载和SD卡的使用
  6. CW3 Clarifications
  7. 能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
  8. 集成学习lgb库调参的粒子群方法
  9. 编译“have the same erasure, yet neither overrides“
  10. 第 5 章 会修电脑不会修收音机 —— 依赖倒转原则