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>
-----------------------------------------------------------------------------------------------
是:不同系统不同语言之间的数据交互
实质:是一种思想
具体实现:
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>
-----------------------------------------------------------------------------------------------