restful服務端及客戶端開發(fā)_第1頁
restful服務端及客戶端開發(fā)_第2頁
restful服務端及客戶端開發(fā)_第3頁
restful服務端及客戶端開發(fā)_第4頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-WORD 格式 - 可編輯 -Restful 服務端及客戶端調用實例1. 新建 web 工程作為服務端 創(chuàng)建服務端代碼前情提示 :GET ( SELECT):從服務器取出資源(一項或多項)。POST(CREATE ):在服務器新建一個資源。PUT( UPDATE ):在服務器更新資源(客戶端提供改變后的完整資源)。PATCH(UPDATE ):在服務器更新資源(客戶端提供改變的屬性)。DELETE ( DELETE ):從服務器刪除資源。2.服務端代碼(每個方法前有注釋,包括單參數,多參數,post ,get 方式的例子)packagecom.eviac.blog.restws;import

2、javax.ws.rs.Consumes;importjavax.ws.rs.DefaultValue;importjavax.ws.rs.FormParam;importjavax.ws.rs.GET;importjavax.ws.rs.POST;importjavax.ws.rs.Path;importjavax.ws.rs.PathParam;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;importnet.sf.json.JSONObject;-WORD 格式 - 可編輯 -importcom.alibaba.f

3、astjson.JSONArray;/* author pavithra*/ 這里 Path定義了類的層次路徑。/ 指定了資源類提供服務的 URI 路徑。Path("UserInfoService")public class UserInfo / GET表示方法會處理HTTP GET 請求GET/這里 Path定義了類的層次路徑。指定了資源類提供服務的URI 路徑。Path("/name/i")/ Produces定義了資源類方法會生成的媒體類型。Produces(MediaType.TEXT_XML)/ PathParam向Path定義的表達式注入UR

4、I 參數值。public String userName(PathParam("i")String i) String name = i;return "<User>" + "<Name>" + name + "</Name>" + "</User>"-WORD 格式 - 可編輯 -WORD 格式 - 可編輯 -GET/這里 Path定義了類的層次路徑。指定了資源類提供服務的URI 路徑。Path("/userinfo/id")

5、/ Produces定義了資源類方法會生成的媒體類型/Consumes(MediaType.APPLICATION_JSON) /傳 jsonProduces(MediaType.APPLICATION_JSON)/ PathParam向Path定義的表達式注入URI 參數值。public String userJson(PathParam("id")String id) /JSONObjectjobj=JSONObject.fromObject(id);/id=jobj.getString("id");return ""name&q

6、uot;:"hanzl","age":1,"id":"+"""+id+"""/ 多參數測試POST/這里 Path定義了類的層次路徑。指定了資源類提供服務的URI 路徑。Path("/user2info")/ Produces定義了資源類方法會生成的媒體類型/Consumes(MediaType.APPLICATION_JSON) /傳 json-WORD 格式 - 可編輯 -/ 多參數配置-WORD 格式 - 可編輯 -Consumes( Me

7、diaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSON) /返回 json/ PathParam向Path定義的表達式注入URI 參數值。public String user2Json(FormParam("id")String id,FormParam("name") String name) System.out.println(id);System.out.println(name);return&qu

8、ot;"name":"+"""+name+"""+","age":1,"id":"+"""+id+"""/ 多參數測試參數為 json POST/這里 Path定義了類的層次路徑。指定了資源類提供服務的URI 路徑。Path("/user3info")/ Produces定義了資源類方法會生成的媒體類型/Consumes(MediaType.APPLICATION_J

9、SON) /傳 json/ 多參數配置Consumes( MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSON) /返回 json/ PathParam向Path定義的表達式注入URI 參數值。-WORD 格式 - 可編輯 -public String user3Json(FormParam("id")-WORD 格式 - 可編輯 -String id) System.out.println(id);return &quo

10、t;"name":"hanzl","age":1,"id":"+"""+id+"""GETPath("/age/j")Produces(MediaType.TEXT_XML)public String userAge(PathParam("j")int j) int age = j;return "<User>" + "<Age>" + age

11、 + "</Age>" + "</User>"3. 配 置 服 務 端web.xml( restful接 口 發(fā) 布 地 址 ) 在web.xml中加入如下配置<servlet><servlet-name>Jersey REST Service</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param>

12、;<param-name>perty.packages</param-name>-WORD 格式 - 可編輯 -<param-value>com.eviac.blog.restws</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping>-WORD 格式 - 可編輯 -<servlet-name>Jerse

13、y REST Service</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping>4.編寫客戶端代碼4.1 新建 java 工程來進行服務端的第一次調用:packagecom.eviac.blog.restclient;importjavax.ws.rs.core.MediaType;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importc

14、om.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;importcom.sun.jersey.api.client.config.DefaultClientConfig;/* author pavithra*/public class UserInfoClient public static final String BASE_URI = "http:/localhost:8080/RestflService" public static final

15、 String PATH_NAME = "/UserInfoService/name/" public static finalString PATH_AGE = "/UserInfoService/age/"public static void main(String args) String name = "Pavithra"int age = 25;-WORD 格式 - 可編輯 -ClientConfigconfig = new DefaultClientConfig();Client client = Client.creat

16、e(config);WebResource resource = client.resource(BASE_URI);WebResourcenameResource = resource.path("rest").path(PATH_NAME + name); System.out.println("Client Response n"+ getClientResponse(nameResource); System.out.println("Response n" + getResponse(nameResource) + &quo

17、t;nn");-WORD 格式 - 可編輯 -WebResourceageResource = resource.path("rest").path(PATH_AGE + age); System.out.println("Client Response n"+ getClientResponse(ageResource); System.out.println("Response n" + getResponse(ageResource);/* 返回客戶端請求。例如: GET* http:/localhost:8080/R

18、ESTfulWS/rest/UserInfoService/name/Pavithra* 返回請求結果狀態(tài)“200 OK”。* param service* return*/private static String getClientResponse(WebResource resource) returnresource.accept(MediaType.TEXT_XML).get(ClientResponse.class).toString();/* 返回請求結果XML 例如: <User><Name>Pavithra</Name></User&

19、gt;* param service* return*/private static String getResponse(WebResource resource) returnresource.accept(MediaType.TEXT_XML).get(String. class);調用結果:-WORD 格式 - 可編輯 -4.2get方式還可以直接從瀏覽器直接調用瀏覽器調用:以上這些都是單純的get 方式提交的數據可使用-WORD 格式 - 可編輯 -5.客戶端調用我這有兩種方式HttpURLConnection,HttpClient兩種5.1HttpURLConnection 調用

20、restful 接口代碼如下:packagecom.eviac.blog.restclient;/* 測試 get 請求方式,請求數據為單個參數,返回結果為json* get 方法提交* 返回數據 json*/importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;.HttpURLConn

21、ection;.MalformedURLException;import .URL;public class JavaNetURLRESTFulClient /post方式public static String postDownloadJson(String path,Stringpost) URL url = null;/ 接口的地址path="http:/localhost:8080/RestflService/rest/UserInfoService/userinfo"/ 請求的參數post="id=""id":"1

22、1"""try url = new URL(path);-WORD 格式 - 可編輯 -HttpURLConnectionhttpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST");/提交模式/ conn.setConnectTimeout(10000);/ 連接超時單位毫秒/ conn.setReadTimeout(2000);/讀取超時單位毫秒/ 發(fā)送 POST 請求必須設置如下兩行httpU

23、RLConnection.setDoOutput(true);httpURLConnection.setDoInput(true);/httpURLConnection.setRequestProperty("Content-Type", "application/json;-WORD 格式 - 可編輯 -charset=utf-8");/ 獲取 URLConnection 對象對應的輸出流PrintWriterprintWriter = new PrintWriter(httpURLConnection.getOutputStream();/ 發(fā)送請求

24、參數printWriter.write(post);/post的參數 xx=xx&yy=yy/ flush 輸出流的緩沖printWriter.flush();/ 開始獲取數據BufferedInputStreambis = newBufferedInputStream(httpURLConnection.getInputStream();ByteArrayOutputStreambos = new ByteArrayOutputStream();intlen;byte arr = new byte1024;while(len=bis.read(arr)!= -1)bos.write(

25、arr,0,len);bos.flush();bos.close();returnbos.toString("utf-8"); catch (Exception e) e.printStackTrace();return null;public static void main(String args) try String id="123"String targetURL ="http:/localhost:8080/RestflService/rest/UserInfoService/userinfo/"targetURL+=id

26、;URL restServiceURL = new URL(targetURL);HttpURLConnectionhttpConnection = (HttpURLConnection) restServiceURL.openConnection(); httpConnection.setRequestMethod("GET");-WORD 格式 - 可編輯 -/返回 xml/httpConnection.setRequestProperty("Content-Type", "text/plain;charset=utf-8");/

27、 返回 jsonhttpConnection.setRequestProperty("Accept", "application/json");if (httpConnection.getResponseCode() != 200) throw new RuntimeException("HTTP GET Request Failed with Error code : "+ httpConnection.getResponseCode();-WORD 格式 - 可編輯 -BufferedReaderresponseBuffer =

28、new BufferedReader(newInputStreamReader( (httpConnection.getInputStream();String output;System.out.println("Output from Server:n");while (output = responseBuffer.readLine() != null) System.out.println(output);/ 解析 jsonhttpConnection.disconnect(); catch (MalformedURLException e) e.printStac

29、kTrace(); catch (IOException e) e.printStackTrace();/ postDownloadJson(null,null);5.2HttpClient 調用 restful 接口( post & get 方式)代碼如下:packagecom.eviac.blog.restclient;importjava.io.BufferedReader;-WORD 格式 - 可編輯 -importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;mons

30、.httpclient.HttpClient;mons.httpclient.HttpException;mons.httpclient.NameValuePair;mons.httpclient.methods.GetMethod;mons.httpclient.methods.PostMethod;-WORD 格式 - 可編輯 -public class RestClient public static void main(String args) String urlpost ="http:/localhost:8080/RestflService/rest/UserInfoS

31、ervice/user3info" Stringurlget = "http:/localhost:8080/RestflService/rest/UserInfoService/name/1"HttpClient client = new HttpClient();/POST 方法GetMethodgetmethod=new GetMethod(urlget);PostMethod method = new PostMethod(urlpost);NameValuePair data = newNameValuePair("id", &quo

32、t;"id":"11"");method.setRequestBody(data);try intstatusCode = client.executeMethod(method);if (statusCode = 200) / String strJson = method.getResponseBodyAsString();/ System.out.println("post 方法 ="+strJson);BufferedReader reader = new BufferedReader(newInputStreamR

33、eader(method.getResponseBodyAsStream();StringBufferstringBuffer = new StringBuffer();String str = ""while(str = reader.readLine()!=null)stringBuffer.append(str);String ts = stringBuffer.toString();System.out.println("post方法 ="+ts); catch (HttpExceptione) e.printStackTrace(); catc

34、h (IOExceptione) e.printStackTrace();-WORD 格式 - 可編輯 -/ 執(zhí)行 get 方法try intstatusCode = client.executeMethod(getmethod);if (statusCode = 200) String strJson =getmethod.getResponseBodyAsString(); System.out.println("get方法="+strJson);/ System.out.println(map.get("user").getUsername();-

35、WORD 格式 - 可編輯 - catch (HttpExceptione) e.printStackTrace(); catch (IOExceptione) e.printStackTrace();5.3HttpURLConnection 調用 restful 接口( post,多參數)服務端方法配置:/ 多參數測試POST/這里 Path定義了類的層次路徑。指定了資源類提供服務的URI路徑。Path( "/user2info")/Produces 定義了資源類方法會生成的媒體類型/Consumes(MediaType.APPLICATION_JSON) /傳 json/ 多參數配置Consumes( MediaType.MULTIPART_FORM_DATA,Med

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論