WebService-CXF总结

WebService
    是:不同系统不同语言之间的数据交互
    实质:是一种思想
    
    具体实现:
        CXF Apache
        hessian
        dubbo 阿里云
    
    CXF是目前比较主流的WebService框架
    提供WS和RS两种服务方式
-----------------------------------------------------------------------------------------------        
    JAXWS    提供了标准,传输XML格式,基于SOAP协议
    JAXRS   提供了设计风格,传输XML或JSON格式,基于HTTP协议
                基于这种风格架构,软件编写可以更简洁
                基于 HTTP 协议, 支持多种消息格式,比如 XML 、JSON
                更易于实现缓存机制(第一次访问资源 缓存,第二次访问资源,返回 304 客户端调用本地)
                访问服务器统一资源,采用不同 HTTP 协议请求方式,服务器端可以得知进行 CRUD 哪个操作!
                HTTP 协议请求方式:@GET 查询 @PUT 修改 @POST 增加 @DELETE 删除    
-----------------------------------------------------------------------------------------------    
    wsdl:webService definition language webService的定义语言
        wsdl:描述了服务的名字及访问地址,还有服务中所有方法的名字,参数以及返回值    
    根据wsdl生成java代码
        wsdl2java -d C:\Users\Windows\Desktop\aaaa -client http://localhost:9999/userService?wsdl
        将服务端的wsdl生成java代码到我们自己的系统(客户端)
-----------------------------------------------------------------------------------------------        
    JAXWS
        服务端
            导入 maven 坐标:jaxws的jar包
            标签:@WebService 使用在类上面,标记类,是WebService服务提供对象
                    @WebService注解设置endPointInterface 接口服务完整类名,
                                       servicename 服务名称
                  @WebMethod 使用在方法上面,标记方法,是WebService服务提供方法
            发布:1、服务实现对象IUserService userService=new UserServiceImpl();
                  2、发布服务地址address=“http://localhost:9999/userService”;
                  3、发布服务(Endpoint对象的publish方法)
                        Endpoint.publish(address,userService);
            网址:http://localhost:9999/userService?wsdl
            
        客户端:
            导入 maven 坐标:cxf的client包
            接收:调用发布WebService服务
                1、创建JaxWsProxyFactoryBean对象
                    JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();
                2、调用JaxWsProxyFactoryBean的方法,设置实现接口类和地址
                    jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
                    jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");
                如果需要添加日志监控
                    jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
                    jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingInInterceptor());
                3、调用JaxWsProxyFactoryBean创建调用远程服务代理对象
                    IUserService proxy=(IUserService) jaxWsProxyFactoryBean.create();
                4、通过代理对象调用原接口Webde的服务
                    proxy.....
        
        实质:服务端将业务操作类及其实现类和实体类一起发布
              客户端通过调用jaxWsProxyFactoryBean对象设置接口和网址,创建代理对象
              因此,客户端通过代理对象来完成服务端的业务操作
-----------------------------------------------------------------------------------------------        
    JAXWS与Spring整合
        配置web.xml文件
            配置spring的核心监听器、配置CXFServlet的Servlet标签
        配置applicationContext.xml文件
            引入名称空间
                xmlns:jaxws="http://cxf.apache.org/jaxws"
                http://cxf.apache.org/jaxws
                http://cxf.apache.org/schemas/jaxws.xsd
            配置服务
                1、address:客户端访问服务路径
                2、serviceClass:配置接口
                3、serviceBean:配置实现类
                <jaxws:server id="userService" address="/userService">
                    <jaxws:serviceBeans>
                        <!-- 此处存放业务接口的实现类全路径 -->
                        <bean class="cn.itcast.crm.service.CustomerServiceImplement" />
                    </jaxws:serviceBeans>
                </jaxws:server>
        配置pom.xml文件
            导入 maven 坐标
            配置启动服务端口    
-----------------------------------------------------------------------------------------------    
    JAXRS
        服务端:
            导入 maven 坐标:jaxrs的jar包,json扩展者,转换json工具包
            标签:
                实体类:
                    @XmlRootElement(name="实体类")    指定序列化(转换 XML、JSON) 对象名字
                业务接口类:
                    第一种 @Path 服务访问资源路径
                        如果访问 saveUser 方法 /userService/user
                    第二种 @Produces 生成(方法返回值) @Consumes 消费 (方法参数)
                        @Consumes 指定能够处理客户端传递过来数据格式
                        @Produces 指定能否生成哪种格式数据返回给客户端
                    第三种 @GET 查询 @PUT 修改 @POST 增加 @DELETE 删除    
                        POST 请求方式访问 保存操作
                        PUT 请求方式访问 修改操作
                        GET 请求方式访问 查询操作
                            如果实现某条数据单独查询,使用 url 参数 !
                                @GET
                                @Path("/user/{id}")
                                @Consumes("applicationContext.xml")
                                @Produces("applicationContext.xml")
                                public User findById(@PathParam("id") Integer id);
                        DELETE 请求方式访问 删除操作
            发布:1、服务实现对象IUserService userService=new UserServiceImpl();
                  2、发布服务地址address=“http://localhost:9999/userService”;
                  3、发布服务(Endpoint对象的publish方法)
                        Endpoint.publish(address,userService);
            网址:http://localhost:9999/userService/user/id
            
        客户端:
            导入 maven 坐标:cxf的client包,json扩展者,转换json工具包
            接收:
                  链式接收
                  create 建立与调用服务资源路径连接
                  type 发送给服务器数据格式----@Consumes
                  accept 接收服务器传输数据格式----@Produces
                  采用HTTP协议的哪种方式访问服务器
                 //获取全部用户集合
                Collection<? extends User> collection=WebClient
                .create("http://localhost:9999/userService/user")
                .accept(MediaType.APPLICATION_XML).getCollection(User.class);
                 //添加用户
                User user =new User();
                WebClient.create("http://localhost:9999/userService/user")
                        .type(MediaType.APPLICATION_XML).post(user);
                
        实质:客户端使用WebClient对象的方法,链式添加服务端地址和数据接收,执行业务

-----------------------------------------------------------------------------------------------            
    JAXRS与spring整合
        配置web.xml文件
            配置spring的核心监听器、配置CXFServlet的Servlet标签
        配置applicationContext.xml文件
            引入名称空间 xmlns:jaxrs="http://cxf.apache.org/jaxrs"
                        http://cxf.apache.org/jaxrs
                        http://cxf.apache.org/schemas/jaxrs.xsd
            配置服务
                1、address:客户端访问服务路径
                2、serviceClass:配置接口
                3、serviceBean:配置实现类
                <jaxrs:server id="userService" address="/userService">
                    <jaxrs:serviceBeans>
                        <!-- 此处存放业务接口的实现类全路径 -->
                        <bean class="cn.itcast.crm.service.CustomerServiceImplement" />
                    </jaxrs:serviceBeans>
                </jaxrs:server>
        配置pom.xml文件
            导入 maven 坐标,json扩展者,转换json工具包
            配置启动服务端口    
        
        最终访问资源服务路径
            服务器根目录地址+web.xml配置+applicationContext.xml address配置+类@Path+ 方法@Path
-----------------------------------------------------------------------------------------------            
    rs
        独立的
            1.导入对应的jar包
            2.提供服务
                @Path??
                    服务器根目录地址+web.xml配置+applicationContext.xml address配置+类@Path+ 方法@Path
                @GET @POSt    @PUT @DELETE ???
                    @Cousume {application_json,}   chi  
                    @Produces   pull
                    public List<User> queryByXxx(String xxx);
                    public void save(User user);
    
            1.如何发送不同类型的请求
            2.如何接收返回的数据
            3.如何发送增删改查对应的数据
            4.条件查询,这些条件该怎么传
        
            WebClient.create(url) //创建连接
                .type() |accept(MediaType.APPLICATION_XML)
                .post(user)|.get(User.class)|.getCollection()|put()|delete()
                
        整合spring        
-----------------------------------------------------------------------------------------------            
    ws    范例:
            实体类:
                public class User {}
            业务接口:
                @WebService
                public interface IUserService {
                    @WebMethod
                    public String sayHello(String name);
                }
            业务实现类:
                @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
                public class UserServiceImpl implements IUserService {
                    public String sayHello(String name) {
                        return "Hello," + name;
                    }
                }
            applicationContext.xml配置:
                <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>
-----------------------------------------------------------------------------------------------                        
    rs    范例:
            实体类:
                @XmlRootElement(name = "User")
                public class User {}
            业务接口:
                @Path("/userService")    //可忽略不写
                @Produces("*/*")        //可忽略不写
                public interface IUserService {

                    @POST
                    @Path("/user")
                    @Consumes({ "application/xml", "application/json" })
                    public void saveUser(User user);

                    @PUT
                    @Path("/user")        //可忽略不写
                    @Consumes({ "application/xml", "application/json" })
                    public void updateUser(User user);

                    @GET
                    @Path("/user")
                    @Produces({ "application/xml", "application/json" })
                    public List<User> findAllUsers();

                    @GET
                    @Path("/user/{id}")
                    @Consumes("application/xml")
                    public User finUserById(@PathParam("id") Integer id);

                    @DELETE
                    @Path("/user/{id}")
                    @Consumes("application/xml")
                    public void deleteUser(@PathParam("id") Integer id);
                }
            业务实现类:
                public class UserServiceImpl implements IUserService {
                public void saveUser(User user) {
                    System.out.println("save user:" + user);
                }
            applicationContext.xml配置:
                <jaxrs:server id="userService" address="/userService" >
                    <jaxrs:serviceBeans>
                        <bean class="cn.itcast.cxf.service.UserServiceImpl" />
                    </jaxrs:serviceBeans>
                </jaxrs:server>
-----------------------------------------------------------------------------------------------                
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
    
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值