9、Web Service-IDEA-jaxrs 服务端客户端的实现
关于RestFul编程可以参考:https://www.cnblogs.com/wang-yaz/p/9237981.html
关于jaxrs的实现需要有restful的理解。
话不多说直接上代码!!
1、服务端的开发
1、新建web项目、工程目录如下图

2、pom文件添加依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion> <groupId>com.cr</groupId>
<artifactId>server</artifactId>
<version>1.0-SNAPSHOT</version> <name>server</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.</version>
</dependency>
<!-- 内置jetty服务器 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.</version>
</dependency> <!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.</version>
<scope>test</scope>
</dependency> <!--restful风格客户端调用所需要的 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.</version>
</dependency> <!--对json的支持 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.</version>
</dependency> <dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、类:
package com.cr.entity; import javax.xml.bind.annotation.XmlRootElement; //基于restful风格的webservice
//客户端与服务的之间通讯可以传到xml、json //该注解指定对象序列化为xml或者json数据时根节点的名称
//xml: <User><id></id></User>
//json:效率更高 {"User":"",pwd:""}
@XmlRootElement(name = "User")
public class User {
private String name;
private String pwd; //.....
}
package com.cr.service; import com.cr.entity.User; import javax.ws.rs.*;
import java.util.List; //访问当前服务接口对应的路径
@Path("/userService")
@Produces("*/*")//支持任意类型
public interface UserService { @POST
@Path("/user")//访问当前端方法对应的路径
@Consumes({"application/xml","application/json"})//服务器支持的请求数据格式类型
public void save(User user); @GET
@Path("/user")
@Consumes({"application/xml","application/json"})
@Produces("application/xml")
public List<User> findUser();
}
package com.cr.service.impl; import com.cr.entity.User;
import com.cr.service.UserService; import java.util.ArrayList;
import java.util.List; public class UserServiceImpl implements UserService {
public void save(User user){
System.out.println("save:"+user);
}
public List<User> findUser(){
List<User> uList = new ArrayList<>(); User u1 = new User("aa","qwe");
User u2 = new User("bb","asd");
uList.add(u1);
uList.add(u2);
System.out.println(uList);
return uList;
}
}
发布服务
package com.cr;
import com.cr.service.impl.UserServiceImpl;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; public class server { public static void main(String[] args) { //发布服务的工程
JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean(); //设置服务的 地址
factoryBean.setAddress("http://localhost:8001/cr/"); //设置服务类
factoryBean.setServiceBean(new UserServiceImpl()); //添加日志输入
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); //发布服务
factoryBean.create(); System.out.println("发布成功...");
}
}
2、客户端的代码
1、工程结构

2、pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion> <groupId>com.cr</groupId>
<artifactId>client</artifactId>
<version>1.0-SNAPSHOT</version> <name>client</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.</version>
</dependency>
<!-- 内置jetty服务器 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.</version>
</dependency> <!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.</version>
<scope>test</scope>
</dependency> <!--restful风格客户端调用所需要的 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.</version>
</dependency> <!--对json的支持 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.</version>
</dependency> <dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、类
User.java
package com.cr.entity; import javax.xml.bind.annotation.XmlRootElement; //基于restful风格的webservice
//客户端与服务的之间通讯可以传到xml、json //该注解指定对象序列化为xml或者json数据时根节点的名称
//xml: <User><id></id></User>
//json:效率更高 {"User":"",pwd:""} @XmlRootElement(name = "User")
public class User {
private String name;
private String pwd;
//....
}
测试:
@Test
public void save(){
//远程调用服务端
WebClient.
create("http://localhost:8001/cr/userService/user").
type("application/json").
post(new User("qq","22"));
}
server端的打印
----------------------------
ID:
Address: http://localhost:8001/cr/userService/user
Encoding: ISO--
Http-Method: POST
Content-Type: application/json
Headers: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[31], content-type=[application/json], Host=[localhost:8001], Pragma=[no-cache], User-Agent=[Apache CXF 3.0.1]}
Payload: {"User":{"name":"qq","pwd":22}}
--------------------------------------
save:com.cr.entity.User@4986f0c7
INFO - LoggingOutInterceptor - Outbound Message
---------------------------
ID: 4
Response-Code: 204
Content-Type:
Headers: {Date=[Mon, 18 Mar 2019 11:56:29 GMT], Content-Length=[0]}
--------------------------------------
测试:
//查询
@Test
public void find(){
WebClient.create("http://localhost:8001/cr/userService/user").get();
}
ID:
Address: http://localhost:8001/cr/userService/user
Http-Method: GET
Content-Type: */*
Headers: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:8001], Pragma=[no-cache], User-Agent=[Apache CXF 3.0.1]}
--------------------------------------
[com.cr.entity.User@7f4f702, com.cr.entity.User@3cb7324]
INFO - LoggingOutInterceptor - Outbound Message
---------------------------
ID: 5
Response-Code: 200
Content-Type: application/xml
Headers: {Content-Type=[application/xml], Date=[Mon, 18 Mar 2019 11:57:38 GMT]}
Payload: <?xml version="1.0" encoding="UTF-8"?><Users><User><name>aa</name><pwd>qwe</pwd></User><User><name>bb</name><pwd>asd</pwd></User></Users>
3、额外的补充




额外的补充都可以尝试去实现!!!
9、Web Service-IDEA-jaxrs 服务端客户端的实现的更多相关文章
- 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建
转自:https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步,新建一个工程,如图: 选 Java 写一个工程名,选择好工程路径 ...
- 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...
- 基于服务(Web Service)的文件管理Winform客户端实现(二)
上一篇主要介绍文件管理服务有哪些方法,实现了哪些功能. 基于服务(Web Service)的文件管理Winform客户端实现(一) 本篇将根据文件服务服务实现Winform客户端设计.开发. 3. ...
- JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)
前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...
- NTP时间同步 服务端 客户端 自动化安装配置
NTP时间同步 服务端 客户端 自动化安装配置 原创内容 http://www.cnblogs.com/elvi/p/7657994.html #!/bin/sh #运行环境 centos6.cent ...
- react服务端/客户端,同构代码心得
FKP-REST是一套全栈javascript框架 react服务端/客户端,同构代码心得 作者:webkixi react服务端/客户端,同构代码心得 服务端,客户端同构一套代码,大前端的梦想, ...
- chrony时间同步 服务端 客户端 安装配置
chrony时间同步 服务端 客户端 安装配置 原创内容http://www.cnblogs.com/elvi/p/7658021.html #!/bin/sh #运行环境 centos7 #chro ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...
- TCP/IP网络编程之基于UDP的服务端/客户端
理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...
随机推荐
- SqlServer常用语句
首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨 No.1 关于查询时间区间是否重叠的sql语句 问题是这样:插入之前,想查询同User是否其 ...
- [PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点
从 PHP 5.3.X 迁移到 PHP 5.4.X不兼容点: 1.不再支持 安全模式 2.移除 魔术引号,设置 magic_quotes_gpc 系列将不会生效 3.Salsa10 和 Salsa20 ...
- 设置placeholder的字体颜色
//设置字体颜色 [self.searchTextField setValue:[UIColor colorWithRed:0.50 green:0.50 blue:0.50 alpha:1.0] f ...
- SqlServer之一些小问题
如何用变量代替字段名? 将语句赋给一个varchar 变量,下列语句等价于(假设传进去的@id=’name‘):'select name from 表名' 如果直接执行这个语句,是没用的.@id不会 ...
- Java:反射与代理
Java世界的繁荣反射这一特性有很大功劳,可以获取全面的类型信息. /** * */ package ref; import java.lang.reflect.Field; import java. ...
- 百度翻译cs文件英文注释
原由:本人英语烂,没办法看不懂国外的代码注释!只能借助其他手段来助我一臂之力了. 虽然翻译内容不是很准确,但好过什么都看不懂的强. 对吧?! 代码有点乱有用的园友自个整理一下吧! 最近没时间所以翻译后 ...
- CSS属性之relative
0.相对定位relative特点 相对定位relative元素总是会占据位置,所占据的位置是在relative元素没有设置left/top/right/bottom属性时的位置: 相对定位relati ...
- Hololens开发笔记:UDP接收数据
Hololens的应用需要与其他设备通信的时候,UDP是比较方便的一种方式,Unity3d 2017.3 C#开发的时候可以用Windows.Networking.Sockets.DatagramSo ...
- HDFS原理解析
一.HDFS简介 HDFS为了做到可靠性(reliability)创建了多分数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(computer nodes ...
- Python爬虫教程-07-post介绍(百度翻译)(上)
Python爬虫教程-07-post介绍(百度翻译)(上) 访问网络两种方法 get: 利用参数给服务器传递信息 参数为dict,使用parse编码 post :(今天给大家介绍的post) 一般向服 ...