定義:REST就是一種編程風格,它能夠精肯定位網上資源(服務接口、方法、參數)java
REST支持數據格式:XML、JSON數據庫
REST支持發送方式:GET,POSTapache
由於SOAP並不假定傳輸數據的下層協議,所以必須設計爲能在各類協議上運行。即便絕大多數SOAP是運行在HTTP上,使用URI標識服務,SOAP也僅僅使用POST方法發送請求,用一個惟一的URI標識服務的入口。舉一個圖書館在線查詢管理系統爲例,服務提供者必須爲每一本書提供一個內部標識,而後可能定義一個listBooks操做來返回一系列圖書,一個getBook操做來返回指定的圖書,一個createBook操做來向數據庫加入新增的圖書,一個deleteBook操做來刪除做廢的圖書,每一個操做都有各自的參數,尤爲是用內部標識來標識操做的圖書。這種設計被詬病之處,在於deleteBook操做也要用POST方法來發送,而其實HTTP協議有更和邏輯的DELETE方法可用。REST正是這樣設計的,REST爲每個資源(此處是圖書)指定一個惟一的URI,而用HTTP的4種方法GET、POST、PUT、DELETE直觀地表示獲取、建立、更新和刪除圖書。同時圖書集合也是和單本的圖書不一樣的資源,若是用/books來表明圖書列表,/books/ID來表明標識爲ID的圖書,那麼對/books的GET操做就表明返回整個圖書列表,對/books/ID的DELETE操做表明刪除指定的圖書,等等。編程
發佈一個服務能夠用於查詢一個學生和多個學生ide
步驟 測試
1.導入jar包this
2.建立學生的pojo類,這裏設置兩個字段spa
package com.liaobei.pojo; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
注意:在pojo類中加入@XmlRootElement 註釋,不然會報錯設計
該註釋的做用是把java對象轉換爲xml格式code
3.建立SEI接口
import java.util.List; import javax.jws.WebService; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.liaobei.pojo.Student; @WebService @Path("/student") public interface StudentInterface { @GET//指定請求方式,若是服務端發佈的時候指定的是GET(POST),那麼客戶端訪問時必須使用GET(POST) @Produces(MediaType.APPLICATION_XML)//指定服務數據類型 @Path("/query/{name}")//@Path("/query/{id}")就是將「/query」映射到方法上,「{id}」映射到參數上,多個參數,以「/」隔開,放到「{}」中 public Student queryStudent(@PathParam("name")String name); @GET @Produces(MediaType.APPLICATION_XML) @Path("/queryList/{name}") public List<Student> querySomeStudent(@PathParam("name")String name); }
4.建立SEI的實現類
import java.util.ArrayList; import java.util.List; import com.liaobei.pojo.Student; public class StudentInterfaceImpl implements StudentInterface { public Student queryStudent(String name) { Student s= new Student(); s.setId(1); s.setName("1"); return s; } public List<Student> querySomeStudent(String name) { Student s= new Student(); s.setId(1); s.setName("1"); Student s1= new Student(); s1.setId(2); s1.setName("2"); List<Student> li = new ArrayList<Student>(); li.add(s); li.add(s1); return li; } }
5.發佈服務
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; public class StudentServer { public static void main(String[] args) { JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean(); bean.setServiceBean(new StudentInterfaceImpl()); bean.setAddress("http://127.0.0.1:12345/user"); bean.setResourceClasses(StudentInterfaceImpl.class); bean.create(); } }
6.測試服務
輸入http://127.0.0.1:12345/user/student/query/1 後若結果以下所示則發佈成功