A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,今天是bos物流项目第五天,主要内容就是WebService的使用

今日需要掌握的有:
  • 了解WebService的作用
  • 了解JAX-WS的使用
  • 理解什么是Restful风格
  • 掌握JAX-RS的使用(注解、传递json、与Spring整合)


请同学们按照如上要求,总结你今日所学

8 个回复

倒序浏览
柯威龙
今天主要学习了两个系统之间的数据通信,使用WebService技术.WebService技术又分为WS和RS.
WS主要是传输xml格式,基于SOAP协议进行数据的传输.
        @WebService 使用类上面,标记类是 WebService 服务提供对象  
        @WebMethod 使用方法上面,标记方法 是 WebService 服务提供方法
        @WebService 注解设置 endPointInterface 接口服务完整类名, servicename 服务名称
        整合Spring:将代理写入注解,然后在代码上注入  
RS主要是传输xml和json格式,基于HTTP协议来进行数据传输(HTTP有七种访问方式).
        (转换json格式的时候需要去写一个转换器,提供依赖和扩展提供者)
        软件编写可以更简洁.基于HTTP协议可以支持多种详细格式       
        使用RS去访问服务器的资源的时候,采用了不同的HTTP协议的请求方式,
        服务端可以使用CRUD.
        HTTP自带缓存机制,可以更易于实现.
        实体类需要@XmlRootElement(name="实体类名称")
        将实体类转换成xml(也叫做序列化)的时候,需要叫什么名字.
        service层:@path当访问路径的时候需要去加类注解的路径然后在加上方法上面的路径
        如果直接基于浏览器/接口调用工具,以下两个注解必须写
        如果基于webcli..可以不需要写
        @produces生成(返回值,指定生成的那种格式数据返回给客户端)  
        @Cousumes消费(方法的参数,指定能够处理客户端传递过来的数据格式)
回复 使用道具 举报
何平波
WebService  整理
1.什么是WebService?
在开发中,由于项目工程大,很多功能模块需要分布在不同的工程系统上,想要让这些分布式的系统数据之间进行交互,就要使用WebService这项技术.
2.CXF是目前WebService开发中比较热门的框架技术,而CXF是WebService中分为WS和RS
2.1 JAX-WS基于soap协议,只能传输xml文件的数据    JAX-RS传输数据,能传输xml数据也能传输json格式的数据,基于http协议.

基于CFX的开发需要在maven工程注入依赖
cxf-rt-frontend-jaxws-3.03.jar  是基于CXF-jax-ws的开发所需要的包
cxf-rt-frontend-jaxrs-3.03.jar  是基于CXF-jax-rs的开发所需要的包
注意一般运行了webService工程和项目工程,需要采用不同的服务器,cxf内置了jetty服务器,使用方法与tomcat类似.
ws的使用方式较为复杂.重点掌握rs的开发方式

3.CXF-WS注解格式的解释
@WebService 使用类上面,标记类是 WebService 服务提供对象,这个接口中的方法发布成一些WebService的服务
@WebMethod 使用方法上面,标记方法 是 WebService 服务提供方法  
endpointInterface,这个参数用来指定这个WebService的抽象服务接口  >>>提供类似于http://localhost:8088/calculator这样的格式
serviceName  服务名称
比如endpointInterface,serviceName  是@WebService的属性,它指定了服务接口类的全局地址和服务名称


4.Spring整合JAX-WS
1.在web.xml文件配置CFX-Servlcet  >>>CXF 基于 web 访问
2.在applicationsContext.xml注入CFX-ws的名称空间
xmlns:jaxws="http://cxf.apache.org/jaxws" http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
3.依赖注入在servie,实体类.
          <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>
        <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>
这些注入都在实体类及接口类都定义好了注解.远程调用url地址也在applicationsContext.xml申明了.



CFX-AJX-RS  WebService远程调用技术
1.什么是restful风格?
更简洁,基于http协议,可传输xml.json格式数据.  更容易实现缓存,第一次访问资源缓存,第二次访问资源返回304给客户端调用本地的资源缓存.
2.关于请求方式
post:请求保存操作.
put:请求修改操作          如:http:locahost:9090/userServie/user   >>>查询userServie里的user操作
get:请求查询操作                        http:locahost:9090/userServie/user/1  >>>查询用户编号为1的操作
delete:请求删除操作

这样做的好处是,服务器可以迅速得知客户端是请求crud哪个操作!迅速做出响应.

2.CFX-AJX-RS的测试使用步骤
2.1导包cxf-rt-frontend-jaxrs-3.03.jar  jetty   log4j日志包
2.2在实体类上做@XmlRootElement注解  它的作用是便于对象的数据进行xml,json格式的转换
在每个方法加上请求的方法 @GET @PUT @DELETE @POST
@Path 服务访问资源路径  基于post,put,get,delete请求的方式引入访问路径  如果访问saveUser,直接在这个业务层类定义这个@Path,就可以被识别到了.
@Produces 生成(方法返回值)>>>指定能否生成哪种格式数据返回给客户端    如果数据是简单的数据类型,可以不用加注解  
@Consumes 消费 (方法参数)>>>指定能够处理客户端传递过来数据格式
3.发布服务
3.1创建业务接口
3.2创建JaxWsProxyFactoryBean();  设置3个方法
setServiceClass()指定哪个Service里的数据转换数据格式    setAddress()设置访问地址http://localhost:9999/userService  create()发布服务
4.客户端的编写
4.1使用 http client 工具   

4.2WebClient 工具类使用 (CXF 自带)
create() 建立与调用服务器资源连接路径
type() 发送给服务器数据传输格式
accpet() 接收服务器传输数据格式
如何转换json数据格式?
User resultUser = WebClient
.create("http://localhost:9997/userService/user/1")
        .accept(MediaType.APPLICATION_JSON).get(User.class);   >>>设置json格式,需依赖注入json转换器

Spring 与CFX-AJX-RS整合
1.maven工程依赖注入cxf整合jar包及其他需要的jar包,详见课程笔记
2.导入web.xml文件注入CFX-AJX-RS核心包,基于CFX-AJX-RS访问.
3.导入需要测试的Service类及接口
4.在spring的配置文件引入rs服务引入名称空间 xmlns:jaxrs="http://cxf.apache.org/jaxrs"  
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
<!--
                address 发布服务地址
                servicesBeans 服务实现类
         -->
        <jaxrs:server id="userService" address="/userService" >
                <jaxrs:serviceBeans>
                        <bean class="cn.itcast.cxf.service.UserServiceImpl" />
                </jaxrs:serviceBeans>
                <jaxrs:inInterceptors>
                        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </jaxrs:inInterceptors>
                <jaxrs:outInterceptors>
                        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </jaxrs:outInterceptors>
        </jaxrs:server>

5.在service接口配置@Produces("*/*")   最终访问资源的服务路径  ,启动服务器,指定端口号
6.端口号访问路径是webService中的请求路径

        @POST  >>>请求方式
        @Path("/user")  >>>访问请求枯井
        @Consumes({ "application/xml", "application/json" })  >>>指定转换的数据格式
回复 使用道具 举报
陈昆明:WebService的主要作用是使数据在不同的系统间进行交互,它分为ws和rs,其中ws是基于soap协议进行xml格式数据的传输,rs则是基于http协议进行数据传输,它支持json数据格式的传输
Restful是一种软件架构设计风格,为我们提供了一系列的标准和规范
掌握JAX-RS的使用:使用webservice都涉及到两个角色:服务端和客户端,
1.    Webservice的使用需要注意客户端和服务端角色的转换
a)                                        客户端                    服务端
b)     客户端接收数据          accept                   @produces
c)     客户端发送数据          type                      @consumer

回复 使用道具 举报 1 0
江某人:

WebService分为ws和rs,ws是基于soap协议进行xml格式数据的传输,rs则是基于http协议进行数据传输,它支持json数据格式的传输,Restful是一种更简洁的,更容易实现缓存实体类需要@XmlRootElement(name="实体类名称")
        将实体类转换成xml(也叫做序列化)的时候,需要叫什么名字.
        service层:@path当访问路径的时候需要去加类注解的路径然后在加上方法上面的路径
        如果直接基于浏览器/接口调用工具,以下两个注解必须写
        如果基于webcli..可以不需要写
        @produces生成(返回值,指定生成的那种格式数据返回给客户端)  
        @Cousumes消费(方法的参数,指定能够处理客户端传递过来的数据格式)
回复 使用道具 举报
本帖最后由 Do1 于 2019-9-18 00:07 编辑


1.了解WebService的作用
webservice是一种跨语言 跨平台的技术,例如一个在美国用服务端C语言编写的服务端,一个在中国用JAVA编写的客户端,他们可以通过webservice实现数据的交互,因为他们收到的响应会是XML或JSON
2.了解JAX-WS的使用
WS只能传输XML,SOAP的请求体装的是xml格式的数据,WS需要编写一堆繁重的客户端及服务端代码,不过你如果知道服务端的wsdl数据,可以通过控制台wsimport -s . http://(服务端路径)?wsdl 通过xml自动生成客户端代码
SOAP本质上是HTTP协议,只不过规范了请求体只能是xml格式,请求头等其它信息和HTTP协议一样,今天课上顺带提到了消息队列,webservice和消息队列(ActiveMQ)的区别就是同步和异步的区别,webservice服务端开起端口监听接收到请求后找到指定的方法进行一系列的处理那么此时客户端就会处于一个阻塞状态没接收到值的话页面会处于加载状态用户体验很差,网络通信的一切来源基于系统提供的Socket套接字API,浏览器出于安全考虑没有给浏览器添加一个自身开起端口监听的方法而是只能向服务器去主动发送请求,后人通过js中xml的特殊性研究出了JSAJAX异步极大改善了用户的页面体验但目前aja在处理实时数据,如拍卖网站,在线游戏,实时股票天气等存在一定的资源浪费现象后来html5内置了websocket对象,websocket对象是将http协议升级成ws协议的一个对象它可以直接让浏览器处于监听状态接收服务端的简单数据,消息队列主要是做到了服务端处理数据到返回数据的异步实现,客户端无需再去等待服务端的处理过程。
3.理解什么是Restful风格
Restful简化了url传输参数的格式,我们不用每次都去拼接一堆的&和name=号  xx/servcies/xxxservice/参数/参数
4.掌握JAX-RS的使用(注解、传递json、与Spring整合)
RS基于HTTP协议,课件中所使用的是阿帕奇的CXF框架,比起传统的WS,无论从代码量还是使用上都大大简化了开发,CXF框架封装了繁重的代码,我们只要调用就行了,由于是HTTP协议所以请求体可以是XML和JSON
客户端代码:
创建连接:WebClient.creat("http://ip地址/项目名称/services/方法空间名称/具体方法名")

(此时处于阻塞状态)指定接收数据请求体转换格式:webclient对象中的accept方法

类型转换getxxx  这个自己根据具体的业务需要调用不同的API,如果是集合形式的对象getCollection(X.class),单一对象get(X.class)等等方法

服务端代码:
1.web.xml  设置cxf框架核心过滤器,过滤service后缀的请求
2.配置cxf.xml,如果没有指定的话默认会去找WEB-INF/cxf.xml,这里由于使用了spring 所以直接配置在application里面一起加载
3.创建实体类,实体类首先在类上面注明xml根元素注解,如果带有集合形式的属性 需要在其上方加上@XmlTransient注解不然会报错
4.service接口注解
    @Path("/userGame/{uid}")                                * 请求方法名
    @GET                                                                 *  请求方式
    @Produces("*/*")                                               *  参数  
    @Consumes({"application/xml","application/json"}) *返回值类型转换
    public User method(@PathParam("uid")String uid);
   
webclient可省去Produces及Consumes注解
4.实现类
service及事务注解必不可少,然后实现接口中的方法即可
回复 使用道具 举报
  陈世彪

bos项目第五天.jpg (283.27 KB, 下载次数: 2)

bos项目第五天.jpg
回复 使用道具 举报
5119 中级黑马 2018-8-8 15:23:52
8#
定区就是对前几天的复习
今天的新知识就是WebService(远程调用)
什么是WebService: 就是很多个系统,进行分布的部署分布的系统数据通信 解决技术
CXF 是目前最主流 WebService 开发框架 ,由 Apache 提供
什么是CXF?  CXF WebService 开发,主要分为两种服务提供方式 WS 、RS
                                1.JAX-WS 传输数据,传输 XML 格式,基于 SOAP 协议
                                2.JAX-RS 传输数据,传输 XML 格式或者 JSON 格式,基于 HTTP 协议
什么是 Restful 风格的服务 ?
        一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件
Restful 风格好处 ?
        基于这种风格架构,软件编写可以更简洁
        基于 HTTP 协议, 支持多种消息格式,比如 XML 、JSON
        更易于实现缓存机制 (第一次访问资源 缓存,第二次访问资源,返回 304 客户端调用本地)

编写JAX-RS:
1建立maven项目   导入坐标
2.导入实体类:   @XmlRootElement 指定序列化(转换 XML、JSON) 对象名字
3.编写业务层:   业务层有四个需要记住的@:
  1.)@path  
  2.)@ @Produces 生成(方法返回值)如果方式中有返回值就要加上这个注解     使用webClient就可以不加这个注解

  3.)@Consumes 消费 (方法参数)如果方式中有参数就要加上这个注解     使用webClient就可以不加这个注解
4.) @访问方式(get  post  put   delete )  
        4.发布服务
        5. 2) WebClient 工具类使用 (CXF 自带)
        读
                Accept   查询 接受返回结果    接收数据
        写
                Type   增删改     发送数据
        导入 cxf-rt-ts-client

回复 使用道具 举报
lsx:今天先是优化了Action代码,抽取了一个BaseAction类,后面再写Action的时候就可以大大的简化代码编写了,


学习了定区模块
一:定区添加功能:
        1完善form表单(id action method)
        2对保存按钮添加点击事件
        3编写FixedAreaAction代码,提供save方法
       
二:定区分页,基本都是对前面的复习一遍继承了BaseAction,代码更为简单



定区关联客户:
把crm_domain 和crm_management导进去
因为crm_domain后期会被crm_management和bos_management共用,
所以抽离出来
Crm_management存放客户信息


搭建CRM系统:
1将两个项目复制Git版本控制目录
2在eclipse中导入crm项目
3CRM系统要单独的数据空间,所以要在oracle创建用户crm
Crm_management运行,就自动创建表了,这里要注意端口号的问题,避免被占用.



Webservice(同步),包含2个角色:服务端:对外提供消息(数据)
                                                        客户端:向外发送请求服务端

两种实现方式:Ws可不做(了解):采用soap协议,传递xml
Rs:采用HTTP协议,传递xml,json.
RS形式支持Restful风格:url值传递风格

传统方式:url?name=value&name=value
Restful:url/value/value/value     
Restful规范()新增:post 修改:put 查询:get 删除:delete)
这是规范,比如修改我用post也可以




客户端程序编写:
有两种:1使用http client工具  需要自己对HTTP协议内容进行定制和判断
           2使用webClient(CXF官方自带)


回复 使用道具 举报
颜琳琳

在分页查询中查询多表的集合会出现延迟加载,那么要在多的一方的getSuXXX上边添加一个@Json(serialize=false)

1.代码优化:
        创建一个BaseAction继承ActionSupport 实现ModelDriven<T>,在BaseAction中生成一个构造器,让其他action继承BaseAction
       
2.(多系统间的数据通信)
*****webService(同步)
        1)服务端(对外提供消息(数据))
        2)客户端(向外发送请求服务端)
        实现方式:
                1)ws(了解)采用soap协议,传递xml(xml传递速度慢)
                2)RS(掌握)采用HTTP协议,传递xml和json**,支持restful风格,url值传递的风格
        值传递风格:
                1)传统方式:url?name=value&name=value
                2)restful:url/value/value(请求方式:新增:post 修改:put 查询:get 删除:delete)
*****消息队列(异步)
        httpclient
       
       
CRM客户信息管理系统:
        CXF是Celtix和XFire两大开源项目的精华,是webService的主流开发框架.
        CXF主要提供两种服务:
                JAX-WS传输数据:XML格式 基于soap协议
                JAX-RS传输数据:XML格式和JSON格式 基于HTTP协议

JAX-WS:
1.服务端两注解:
@webService使用在类上面,标记的类为WebService服务提供对象
@WebMethod使用在方法上,标记方法为WebService服务所提供的方法
2.service实现类:
@WebService注解设置endPointInterFace接口服务完整类名,ServiceName服务名称
3.发布服务:
endpoint.publish(发送的服务地址,服务实现对象)

JAX-WS和Spring整合
1.基于Maven的坐标导入
2.web.xml的配置
3.配置Spring cxf服务发布
1)引入名称空间
2)配置服务
        1)address 客户端访问服务路径
        2)serviceClass配置实现接口
        3)serviceBean配置实现类
4.访问拼接地址:
ip+prot+项目名(/)+web.xml+applicationContext.xml+接口配置的路径
如: http://localhost:9998/cxf_ws_spring/services/userService?wsdl  

JAX-RS
restful风格的服务:url的值传递方式
好处:
        基于这种风格构架,基于http协议使软件编写更为简洁,更易于实现缓存机制(第一次访问资源 缓存,第二次访问资源,返回304 客户端进行调用本地 缓存)
        访问服务器统一资源,采用不同的http协议请求方式,服务器可得知进行CURD的哪个操作
       
        实体类中:
        @XmlRootElement 指定序列化(转化XML,JSON)对象名字
    服务端:(@path @请求方式 )
        服务器的方法有返回值:@produces()指定能否生成哪种格式数据返回给客户端
        服务器的方法需要接收参数:@consumers()指定能够处理客户端传递过来的数据格式
若基于webCelinet代码客户端,以上两个注解可省略,若值基于浏览器或者接口调用工具(postman用来查看接口怎么实现)以上两个注解必须定义.
        @Path服务访问资源路径,若实现某条数据单独查询,使用url参数
restful:url/value/value
        例如:
        根据id查询:url/1   @path("/findById/{id}")
        @请求方式
        public User findById(@pathParam Integer id);
        注意:如果@path后面的名字和方法中参数的名字相同只需写@pathParam,若不相同,则需要在@pathParam("id")定义一个相同名字
       
传统方式:url?name=value&name=value
        @path("/findById")
        @请求方式
        public User findById(@queryParam Integer id);

客户端:
*****WebClient (CXf自带)
结构:webClient.create(服务端url).两个方法
1)accept({"MediaType.application.xml",""MediaType.application.json"})--->服务端有返回值,接收数据
2)type({""MediaType.application.xml",""MediaType.application.json"})--->发送数据
creatwe 建立预调用的资源路径 连接
注意:若服务端有参数又有返回值,那么客户端需要用accept().type()
请求方式(调用的方式与服务端的请求方式要相同) get()查询 getCollection()查询所有

JAX-RS传输JSON格式的数据
        若指定客户端要获取json内容,需要在项目中引入json的转换器(引入两个坐标)
       
JAX-RS和Spring的整合:
        1.在applicationContext.xml中
         1)引入名称空间
         2)配置:address 发布服务地址 serviceBeans 服务实现类
         最终访问服务器路径:
服务器根目录地址+web.xml配置+applicationContext.xml中的address配置+方法@path
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马