



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東交通學院《金融學概論》2023-2024學年第二學期期末試卷
- 上海南湖職業(yè)技術學院《大學信息技術》2023-2024學年第二學期期末試卷
- 湖南中醫(yī)藥大學《中國建筑史》2023-2024學年第二學期期末試卷
- 南方科技大學《工業(yè)通信與網絡技術》2023-2024學年第二學期期末試卷
- 湖北工業(yè)大學工程技術學院《制漿造紙機械與設備》2023-2024學年第二學期期末試卷
- 浙江大學《經典本草與湖湘中醫(yī)藥文化》2023-2024學年第二學期期末試卷
- 黑龍江幼兒師范高等??茖W校《兵器美學》2023-2024學年第二學期期末試卷
- 成都工貿職業(yè)技術學院《設計與開發(fā)課程設計》2023-2024學年第二學期期末試卷
- 內蒙古經貿外語職業(yè)學院《地理信息工程課程設計與實踐》2023-2024學年第二學期期末試卷
- 湖南交通職業(yè)技術學院《空間文學與敘事》2023-2024學年第二學期期末試卷
- 認識危險(小班安全第一課)-圖文
- 2024年國家基本公衛(wèi)-老年人健康管理-考試復習題庫(含答案)
- 第三講:虹吸管及水泵的水力計算
- 網絡系統(tǒng)集成(第二版) 課件第一章 網絡系統(tǒng)集成緒論
- 真菌性角膜炎的護理
- 單肺通氣與肺保護通氣策略護理課件
- 科普作家協(xié)會會員
- 《鋼鐵是怎樣煉成的》選擇題100題(含答案)
- 垃圾中轉站報告
- 新型顯示行業(yè)Mini LED Micro LED Micro OLED多點開花產業(yè)鏈如何聚焦
- 市政工程試驗檢測培訓教程
評論
0/150
提交評論