WebService

    
1. webService 

    先来说一下个人的理解:webService 最终是为了实现不同应用之间访问,包括方法的调用,现在
    我看到的是远程方法的调用,它就相当于一个远端的Spring容器一样,我们在调用端获得一个代理
    对象,然后用代理对象来调用方法,最终执行方法的是远端的真实服务对象,这个对象将方法执行后,
    以xml形式或者是json形式返回结果;

        Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML
    (标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布
    式的互操作的应用程序。 
   
        Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,
    就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台
    或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以
    执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一
    些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。
    Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

    
    1. Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,
        像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,
        并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,
        同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

    2. JAX-WS(Java API for XML Web Services)规范是一组XML web services的JAVA API,JAX-WS允许开发者
        可以选择RPC-oriented或者message-oriented 来实现自己的web services。
    3. JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java 
        编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java 
        SE5引入的Java注解来简化Web服务的客户端和服务端的开发和部署。
    4. RESTful
        一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端
        和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
    
        REST
        (英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,
        比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编
        写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,
        简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾
        向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设
        计的风格。
        
2.  WebService到底是什么?

            一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

       所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则
       可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户
       端程序可以在不同的操作系统上运行。

        所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的
        一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用
        的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,
        淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,
        让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,
        往大的概念上吹,就是所谓的SOA应用。

       其实可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程
       序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来
       调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供
       这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作
       的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在
       Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写
       Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。 

       WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数
       据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类
       型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service
       平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个
       Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,
       这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议
       还必须与平台和编程语言无关。        
        

 

    关于webService的理解:现在回过头来看webService,其实webService 就是一个在web上的Service
就是说我们平时写的Service层现在放到了网络上,对外提供了一个访问路径,你通过路径可以获得响应
的Service服务,这样带来的直接好处是 Service的分布式,我们可以将Service分布到不同的服务器上
这样就实现了把 大量的计算工作 分不到不同的计算机上,实现了计算能力的提高; 

1.  服务器端代码要打成war包,因为这个要发布到服务器上运行提供服务;在sts中建立maven
        项目时,引入tomcat插件,这个tomcat就相当于一个外部的tomcat服务器;
    客户端代码打jar包,这个客户端代码只需要在客户端的jvm(java虚拟机)上运行就可以了;
    
2.  CXF WS
    1. 单独运行:    
        1. 服务器端发布服务:
            Endpoint.publish(address, userService);
        2. 客户端发送请求:
            // 创建调用远程服务代理对象
            IUserService proxy = (IUserService) jaxWsProxyFactoryBean.create();
            // 调用代理对象 任何一个方法,都将通过网络 调用web服务
            System.out.println(proxy.sayHello("传智播客"));
            
    2. 与Spring整合:
        1.  服务器端发布服务: 
        
            1. 在web.xml中配置 servlet: CXFService 用于 分发 拦截到的 request;
                <!-- CXF 基于web访问 -->
                <servlet>
                    <servlet-name>CXFService</servlet-name>
                    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
                    <load-on-startup>1</load-on-startup>
                </servlet>
                <servlet-mapping>
                    <servlet-name>CXFService</servlet-name>
                    <url-pattern>/services/*</url-pattern>
                </servlet-mapping>
                
                /* 以上在web.xml中配置 CXFService */
        
        
            2.  将提供服务的类的配置放在Spring核心配置文件中(1.访问路径,2.服务接口,3.服务实现类;)
                <!-- 
                    address 客户端访问服务路径  ,这个路径与web.xml中的配置结合
                    serviceClass 配置接口
                    serviceBean 配置实现类 
                 -->
                <jaxws:server id="userService" address="/userService" 
                    serviceClass="cn.itcast.cxf.service.IUserService">
                    <jaxws:serviceBean>
                        <bean class="cn.itcast.cxf.service.UserServiceImpl" />
                    </jaxws:serviceBean>
                </jaxws:server>
            3. 服务端代码都在实现类中:    (注解示例如下:)
                1. 接口注解
                    @WebService
                    public interface IUserService {
                    }
                2. 实现了注解    
                    @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
                    public class UserServiceImpl implements IUserService {
                    }
            
        2. 客户端配置:
            1.在application.xml中配置: (1.提供服务的接口(调用方法的载体),2.提供服务的地址,)
                <!-- serviceClass 服务接口 address 服务访问地址 -->
                
                <jaxws:client id="userServiceClient" serviceClass="cn.itcast.cxf.service.IUserService"
                    address="http://localhost:9998/cxf_ws_spring/services/userService">
                    
                    <!-- 来源消息拦截器 -->
                    <jaxws:inInterceptors>
                        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                    </jaxws:inInterceptors>
                    <!-- 输出消息拦截器 -->
                    <jaxws:outInterceptors>
                        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                    </jaxws:outInterceptors>
                </jaxws:client>
            2.客户端代码:
                public class JAXWS_Spring_Test {
                    @Autowired
                    private IUserService proxy;
                    
                    @Test
                    public void test1(){
                        proxy.sayHello("你好");
                    }
                }
                
            
3.  CXF WS 调方法: 使用proxy 本地代理调用方法,实现对远端对象方法的调用,所以需要客户端也要有接口;

    CXF RS 调对象: 使用访问路径+访问方式(get post put delete) 实现对远端对象不同方法的调用;所以
        不需要客户端也要有接口
        
4. 一个类交给Spring管理,如果是xml配置方式,一定要<bean>标签吗? 
    答:好像是的;
    
5. CXF RS 单独运行
    
    
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值