• [WebService]无知限制了我的想象力啊。


    WebService 让一个程序可以透明地调用互联网的程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。WebService是基于http 协议的组件服务,WebService 是分散式应用程序的发展趋势。

    SOAP:

       WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。

      SOAP协议 = HTTP协议 + XML数据格式

      SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

    发布一个webservice:

    import javax.xml.ws.Endpoint;
    
    @WebService
    public class WsServices {
        public static void main(String[] args) {
            System.out.print("start publish~~");
            Endpoint.publish("http://localhost:3322/lucia", new WsServices());
            System.out.print("end publish~~~~~");
        }
        
        public String getId(String str){
            System.out.print(str + "services start !");
            String a = "ok";
            System.out.print(a);
            return a;
        }
    }

    要发布为WebService服务的类,必须要注册,通过注解@WebService的方式,其次注册为WebService服务的类,只会发布其公共的方法,其中不包含静态方法,如上,只会发布getId方法,在main方法中Endpoint.publish方法是用来发布服务用的,第一个参数为服务地址,后面的3322是端口号,这个不是固定的,随便写4个数字都行,第二个参数是实现类。

    run java的main方法,发布服务。启动服务,浏览器输入http://localhost:3322/lucia?wsdl

    出现如图的结果,表示发布完成,再来是要测试客户端连接。

    package com.a.webservice;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.rmi.RemoteException;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    
    public class ClientTest {
        public static void main(String[] args) throws MalformedURLException {
            try{
                String url = "http://localhost:3322/lucia";//服务端路径
                Service serv = new Service();
                Call call = (Call) serv.createCall();
                call.setTargetEndpointAddress(new URL(url));
                call.setOperationName(new QName("http://webservice.a.com/", "getId"));//发布方法的命名空间,在上图中搜索namespace。
                String result = (String) call.invoke(new Object[]{"lucia"});
                System.out.println("result = " + result);
                System.out.println("---------success!" );
            } catch (ServiceException e) {
                e.printStackTrace();
            } catch(RemoteException e) {
                e.printStackTrace();
            }
        }
    }

    测试结果:

  • 相关阅读:
    BZOJ3212 Pku3468 A Simple Problem with Integers(线段树区间求和、区间加模板)
    BZOJ2208 [Jsoi2010]连通数
    洛谷P3952 时间复杂度
    BZOJ1051 [HAOI2006]受欢迎的牛
    BZOJ4318 OSU!
    BZOJ1798 [Ahoi2009]Seq 维护序列
    BZOJ1483 [HNOI2009]梦幻布丁
    洛谷P1439 最长公共子序列(O(nlogn)最长公共子序列模板)
    BZOJ2429 [HAOI2006]聪明的猴子
    BZOJ3714 [PA2014]Kuglarz
  • 原文地址:https://www.cnblogs.com/luciameng/p/7879824.html
Copyright © 2020-2023  润新知