webService

来源:互联网 发布:ssm框架打印sql语句 编辑:程序博客网 时间:2024/04/28 19:37

WebService

标签(空格分隔): webService


一、什么是webService:
webService即WEB服务。它使一种跨编程语言和操作系统的远程调用技术。

1、采用标准的SOAP(Simple Object Access Protocol)协议传输。SOAP属于w3c标准。2、采用wsdl作为描述语言的webService使用说明书,wsdl属于w3c标准。3、xml是webService跨平台的基础。

二、webService的使用场景

1、多个异构系统的集成2、发布公共的服务接口

三、webService的三要素

1、SOAP    SOAP是一种简单对象访问协议(Simple Object Access Protocol)是一种简单的基于XML的协议。它使用成语通过HTTP来交换信息,可以理解为:SOAP = HTTP + XML。SOAP不是webService的专有协议,其他应用协议也使用SOAP传输数据。如:SMTP等。2、WSDL(webService description language)    是基于xml的御用描述webService及函数,参数,返回值。也就是说wsdl是webService的使用说明书。3、UDDI    UDDI是一种目录服务,企业经自己开发的webService注册在UDDI,也可以使用别的企业在UDDI上注册的服务,从而达到资源共享,促进全球经济合作。

四、使用JAX-WS开发webService

    JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-RemoteProcedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
  • 编程思路
    1、编写SEI(Service Endpoint Interface)
    2、发布服务类
    3、根据服务地址查看wsdl(使用说明书)
    4、根据wsdl生成客户端代码
    使用命令:wsimport -s . -p 包名 wsdl地址
    5、客户端调用
  • 编码

    1. 编写SEI(ServiceEndpoint Interface),SEI在webservice中称为portType,在java中称为接口

      /** * 天气服务接口 * @author MOTUI * */public interface WeatherService {    /**     * 根据城市名称获得天气情况     * @param cityName     * @return     */    public String getWeather(String cityName);}
    2. 编写SEI实现类,此类作为webservice提供服务类

      /** * 服务接口实现类 * @author MOTUI * */@WebServicepublic class WeatherServiceImpl implements WeatherService {    @Override    public String getWeather(String cityName) {        if ("北京".equals(cityName)) {            return "阴转多云,18~25摄氏度";        }        return "其他地区正在完善";    }}
    3. 发布服务

       /** * 发布服务 * @author MOTUI */public class TestPublishService {    public static void main(String[] args) {        System.out.println("发布Service");        /**         * 两个参数         * 参数1:对外访问地址         * 参数2:发布的Service实现类         * 地址中的端口号自己定义,只要不冲突即可         */        Endpoint.publish("http://localhost:9999/ws", new WeatherServiceImpl());    }}
    4. 测试服务是否发送成功
      这里写图片描述

    5. wsdl的阅读
      a.wsdl从上往下阅读
      b.首先在wsdl中找到service 的name 也就是服务视图名
      c.通过服务视图名找到对应的binding,通过binding找到对应的type
      d.通过type找到对应的portType,要调用的方法,参数,返回值,描述都在PortType中

      这里写图片描述

    6. 生成客户端代码
      a.Wsimport介绍

           wsimport是jdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码).当然,无论服务器端的WebService是用什么语言写的,都可以生成调用webservice的客户端代码,服务端通过客户端代码调用webservice。     wsimport.exe位于JAVA_HOME\bin目录下.

      b.常用参数为:

       -d<目录>  - 将生成.class文件。默认参数。 -s<目录> - 将生成.java文件。 -p<生成的新包名> -将生成的类,放于指定的包下。 (wsdlurl) http://server:port/service?wsdl,必须的参数。 示例:wsimport -s . -p 包名 wsdlurl 注意:-s不能分开,-s后面有个小点
    7. 客户端调用
      方式一:

       /** * 测试客户端 * @author MOTUI * */public class TestClient {    public static void main(String[] args) {        //获得WeatherServiceImplService对象        WeatherServiceImplService serviceImplService = new  WeatherServiceImplService();        //通过WeatherServiceImplService对象获得WeatherServiceImpl核心类        WeatherServiceImpl serviceImplPort = serviceImplService.getWeatherServiceImplPort();        //调用方法        String weather = serviceImplPort.getWeather("北京");        System.out.println(weather);    }}

      方式二【标准的webService调用方式】:

      /** * 测试客户端 * @author MOTUI * */public class TestClient1 {    public static void main(String[] args) throws Exception {        //服务器地址        URL url = new URL("http://localhost:9999/ws?wsdl");        /**         * 参数1:wsdl 中的targetNamespace         * 参数2:wsdl 中的服务视图名称         */        QName qName = new QName("http://service.motui.com/","WeatherServiceImplService");        /**         * 参数1:wsdl 地址         * 参数2:QName         */        //创建服务器对象        Service service = Service.create(url,qName);        //获取protType        WeatherServiceImpl port = service.getPort(WeatherServiceImpl.class);        //调用方法        String weather = port.getWeather("北京");        System.out.println(weather);    }}

    五、webService的优缺点
    优点:

    1、采用xml支持跨平台远程调用2、基于http的SOAP协议,可跨越防火墙3、支持面向对象开发4、有利于软件和数据的重用,实现松耦合。

    缺点:

    由于SOAP是基于xml传递数据,xml本身传递数据时会传输一些无关数据从而效率不高,随着SOAP协议的不断完善,SOAP协议增加了许多内容,这样那个就导致了使用SOAP协议去完成简单的数据传输的效率不高。
0 0