一. 創建兩個maven jar項目
,
二 .編寫服務器端 (RS_Server)
1. 導jar包 在pom.xml文件中寫依賴的jar包
<dependencies>
<!-- CXF RS開發 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 內置jetty服務器 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
</dependency>
<!-- log4j日誌 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<!-- 發送json數據需要以下兩個jar包 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
2. 編寫一個實體類User 添加註解
package com.blueSky.domain;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="User") //指定序列化對象的名字,服務器端實體類註解name屬性值要和該名字一樣
public class User {
private Integer id;
private String name;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", gender=" + gender + "]";
}
}
3. 編寫IUserService接口 添加註解
package com.blueSky.service;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import com.blueSky.domain.User;
@Path("/userService") //訪問路徑(/userService/)
public interface IUserService {
/*
* 添加數據
* */
@POST //添加操作
@Path("/user") // 該方法訪問路徑爲 /userService/user
@Consumes({"application/xml","application/json"}) //該方法可以接收xml和json類型的數據 (mime類型)
public void addUser(User user);
/*
* 刪除數據
* */
@DELETE
@Path("/user/{id}")
@Consumes({"application/xml","application/json"})
public void deleteUser(@PathParam("id") int uid); //會把path中的id值作爲實參傳給形參uid
/*
* 修改數據
* */
@PUT
@Path("/user")
@Consumes({"application/xml","application/json"})
public void updateUser(User user);
/*
* 查詢所有數據
* */
@GET
@Path("/user")
@Produces({"application/xml","application/json"}) //可以返回xml,json類型的數據
public List<User> findAllUser();
/*
* 查詢一個數據
* */
@GET
@Path("/user/{id}")
@Consumes({"application/xml","application/json"}) //該方法既接收參數又返回參數 兩個註解都要寫
@Produces({"application/xml","application/json"})
public User findUser(@PathParam("id") Integer uid); //會把path中的id值作爲實參傳給形參uid
}
4. 編寫UserServiceImpl實現類
package com.blueSky.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.blueSky.domain.User;
import com.blueSky.service.IUserService;
public class UserServiceImpl implements IUserService{
/*
* 添加數據
* */
public void addUser(User user){
System.out.println(user.getName());
System.out.println("添加用戶....");
}
/*
* 刪除數據
* */
public void deleteUser(int id){
System.out.println("刪除用戶"+id);
}
/*
* 修改數據
* */
public void updateUser(User user){
System.out.println("修改用戶信息....");
}
/*
* 查詢所有數據
* */
public List<User> findAllUser(){
//因爲沒有數據庫,手動製作一些數據
List<User> list = new ArrayList<User>();
//創建第一個用戶
User user1 = new User();
user1.setId(1);
user1.setName("張三");
user1.setGender("男");
list.add(user1);
//創建第二個用戶
User user2 = new User();
user2.setId(2);
user2.setName("李四");
user2.setGender("男");
list.add(user2);
//返回結果list
return list;
}
/*
* 查詢一個數據
* */
public User findUser(Integer id){
//因爲沒有數據庫,手動製作一些數據
//創建第一個用戶
User user1 = new User();
user1.setId(1);
user1.setName("張三");
user1.setGender("男");
//創建第二個用戶
User user2 = new User();
user2.setId(2);
user2.setName("李四");
user2.setGender("男");
//返回結果list
if(id==1){
return user1;
}else if(id==2){
return user2;
}else{
return null;
}
}
}
5. 編寫UserServer類 發佈服務
package com.blueSky.server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
import com.blueSky.domain.User;
import com.blueSky.service.IUserService;
import com.blueSky.service.impl.UserServiceImpl;
public class UserServer {
public static void main(String[] args) {
//1.創建服務接口實現類對象
IUserService userService = new UserServiceImpl();
//2.創建bean工廠,並進行設置
JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
jaxrsServerFactoryBean.setResourceClasses(User.class); //設置實體類
jaxrsServerFactoryBean.setServiceBean(userService); //設置服務類
jaxrsServerFactoryBean.setAddress("http://127.0.0.1:9001"); //設置地址
//3發佈服務
jaxrsServerFactoryBean.create();
}
}
6. 瀏覽器訪問進行測試
三 編寫客戶端(RS_Client)
使用web_client工具類
1.導jar包
pom.xml中寫
<!-- rs客戶端 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.1</version>
</dependency>
<!-- json轉換相關 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
2. 編寫一個實體類
package com.blueSky.domain;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="User") //指定序列化對象的名字,服務器端實體類註解name屬性值要和該名字一樣
public class User {
private Integer id;
private String name;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", gender=" + gender + "]";
}
}
3. 編寫請求服務類
package com.blueSky.Service;
import java.util.Collection;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
import com.blueSky.domain.User;
public class UserService {
public static void main(String[] args) {
//accept 接收 type發送
//添加用戶
User user1 = new User();
user1.setName("客戶端王五");
WebClient.create("http://127.0.0.1:9001/userService/user")
.type(MediaType.APPLICATION_XML) // 發送給服務器的數據格式
.post(user1); // post請求方式添加數據
//刪除用戶
WebClient.create("http://127.0.0.1:9001/userService/user/1") //給參數
.type(MediaType.APPLICATION_XML).delete();
//查詢所有用戶 json格式
Collection<? extends User> collection = WebClient
.create("http://127.0.0.1:9001/userService/user")
.accept(MediaType.APPLICATION_JSON) //接收數據格式爲json
.getCollection(User.class); //使用getCollection方法來接收集合數據
System.out.println(collection);
//查詢單個用戶
User user = WebClient
.create("http://127.0.0.1:9001/userService/user/1") //給定參數
.accept(MediaType.APPLICATION_JSON) //接收數據格式爲json
.get(User.class); // User接收
System.out.println(user);
}
}
4. 訪問服務路徑,進行測試
客戶端控制檯顯示
服務器端控制檯顯示
zz