何平波
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" }) >>>指定转换的数据格式 |