日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RESTful API实现APP订餐实例

發(fā)布時間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RESTful API实现APP订餐实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

web網站如下:




客戶端APP查詢以及訂餐:



服務器端接收客戶訂單信息:




客戶端通過HTTP+JSON來調用這些服務。


首先是客戶端:

客戶端要用這些jar文件,不要忘記放進去:



首先是HttpHelper.java

package my;import org.apache.http.HttpEntity; import org.apache.http.StatusLine; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;public class HttpHelper {//HTTP GET測試public static String doGet(String url) throws Exception{CloseableHttpClient httpclient=HttpClients.createDefault();HttpGet httpget=new HttpGet(url);CloseableHttpResponse response=httpclient.execute(httpget);try {StatusLine statusLine=response.getStatusLine();int status=statusLine.getStatusCode();if(status!=200) {throw new Exception("Http GET出錯:"+status+", "+statusLine.getReasonPhrase());}HttpEntity entity=response.getEntity();if(entity!=null) {long len=entity.getContentLength();if(len!=-1&&len<16384) {String replyText=EntityUtils.toString(entity);return replyText;}else {//Stream content out}}}finally {response.close();}return null;}//HTTP POST測試public static String doPost(String url,String reqText) throws Exception{CloseableHttpClient httpclient=HttpClients.createDefault();HttpPost httppost=new HttpPost(url);//上行數(shù)據(jù)StringEntity dataSent=new StringEntity(reqText,ContentType.create("text/plain","UTF-8"));httppost.setEntity(dataSent);CloseableHttpResponse response=httpclient.execute(httppost);try {StatusLine statusLine=response.getStatusLine();int status=statusLine.getStatusCode();if(status!=200) {throw new Exception("HTTP POST出錯:"+status+", "+statusLine.getReasonPhrase());}//下行數(shù)據(jù)HttpEntity dataRecv=response.getEntity();if(dataRecv!=null) {long len=dataRecv.getContentLength();if(len!=-1&&len<16384) {String replyText=EntityUtils.toString(dataRecv);return replyText;}else {//Stream content out}}}finally {response.close();}return null;}}

然后是Booking.java

package my;import java.io.BufferedReader; import java.io.InputStreamReader;import org.json.JSONArray; import org.json.JSONObject;public class Booking {String baseUrl="http://127.0.0.1:8080/myweb";private void book(int foodId) throws Exception{JSONObject jsReq=new JSONObject();jsReq.put("foodId", foodId);jsReq.put("time", "2017-02-11 00:00:00");JSONObject jsClient=new JSONObject();jsClient.put("clientName", "朱小明");jsClient.put("clientPhone", "13156254789");jsClient.put("clientAddress", "XXX路XX號XX樓");jsReq.put("client", jsClient);String replyText=HttpHelper.doPost(baseUrl+"/api/Book", jsReq.toString());//應答消息,錯誤檢測JSONObject jsReply=new JSONObject(replyText);int error=jsReply.getInt("error"); String reason=jsReply.getString("reason");if(error!=0) {System.out.println("服務器返回錯誤!error="+error+", reason:"+reason);return;}JSONObject data=jsReply.getJSONObject("data");System.out.println("訂單已下達!訂單號碼:"+data.getInt("bookId"));}//RESTful形式的APIprivate void list() throws Exception{String replyText=HttpHelper.doGet(baseUrl+"/api/ListFood");//錯誤碼檢測JSONObject jsReply=new JSONObject(replyText);int error=jsReply.getInt("error");String reason=jsReply.getString("reason");if(error!=0) {System.out.println("服務器返回錯誤!error"+error+" ,reason:"+reason);return;}//把電影列表顯示給用戶JSONArray data=jsReply.getJSONArray("data");for(int i=0;i<data.length();i++) {JSONObject m=data.getJSONObject(i);String line=String.format("商品號:[%d] 商品名【%s】 價格: %s元 飲料:%s 商家:%s ", m.getInt("id"),m.getString("title"),m.getString("price"),m.getString("drink"),m.getString("merchant"));System.out.println(line);}}public void handleCommand(String[] argv) throws Exception{if(argv[0].equals("list")) {list();}else if(argv[0].equals("book")&&argv.length==2) {book(Integer.valueOf(argv[1]));}else {System.out.println("無效命令或無效參數(shù)!");}}//用戶主界面public void shell() throws Exception{InputStreamReader m=new InputStreamReader(System.in);BufferedReader reader=new BufferedReader(m);while(true) {System.out.print("\n>"); //輸入提示String nextline=reader.readLine();if(nextline==null) break;String[] argv=nextline.split(" ");if(argv.length==0) continue;if(argv[0].equals("quit")) break;try {handleCommand(argv);}catch(Exception e) {e.printStackTrace();}}reader.close();}public static void main(String[] args) {try {Booking t=new Booking();t.shell();}catch(Exception e) {e.printStackTrace();}}}


服務器端:要使用json的jar




book.jsp代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'book.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is my JSP page. <br></body> </html>


list_food.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>菜單列表</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><script src="jquery/jquery.js"></script><script src="bootstrap/js/bootstrap.min.js"></script><script src="jquery/jquery.json-2.3js"></script><script>function trace(msg){try{console.log(msg);}catch(err){}//頁面加載后的初始化工作$(document).ready(function(){});}</script></head><body><div class="container">外賣列表</div><table class="table"><tr><th>菜名</th><th>價格</th><th>飲料</th><th>商家</th></tr><tr><td> <a href="book.jsp?foodId=100001"> 脆皮雞 </a></td><td> 15 </td><td> 冰紅茶 </td><td> 美團 </td></tr><tr><td> <a href="book.jsp?foodId=10002"> 黃燜雞 </a></td><td> 18 </td><td> 雪碧 </td><td> 餓了嗎 </td></tr><tr><td> <a href="book.jsp?foodId=10003"> 重慶雞公煲 </a></td><td> 18 </td><td> 礦泉水 </td><td> 百度外賣 </td></tr></table></body> </html>


這個web.xml要做如下配置:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>Book</servlet-name><servlet-class>my.BookServlet</servlet-class></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>ListFood</servlet-name><servlet-class>my.ListFoodServlet</servlet-class></servlet><servlet-mapping><servlet-name>Book</servlet-name><url-pattern>/api/Book</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ListFood</servlet-name><url-pattern>/api/ListFood</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>list_food.jsp</welcome-file></welcome-file-list> </web-app>


關于java的class,從tcp stream讀取數(shù)據(jù)的文件

Util.java

package my;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream;public class Util {// 從TCP Stream中讀取時,要反復讀取,直接讀完public static String readAsText(InputStream streamIn, String charset) throws IOException {ByteArrayOutputStream cache = new ByteArrayOutputStream(4096); byte[] data = new byte[1024]; while (true){int len = streamIn.read(data);if(len < 0) // 連接已經斷開break;if(len == 0) // 數(shù)據(jù)未完continue;// 緩存起來cache.write(data, 0, len);if(cache.size() > 1024*16) // 上限, 最多讀取16KBbreak;} return cache.toString(charset);} }


下面是兩個Servlet

一個是BookServlet.java

package my;import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.json.JSONObject;public class BookServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{// 讀取用戶請求String reqText = Util.readAsText(request.getInputStream(), "UTF-8"); JSONObject jsReq = new JSONObject(reqText);JSONObject client = jsReq.getJSONObject("client"); // 客戶的快遞地址String clientName = client.getString("clientName"); String clientPhone = client.getString("clientPhone"); String clientAddress = client.getString("clientAddress");int foodId = jsReq.getInt("foodId");String time = jsReq.getString("time");Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 構造JSONJSONObject jsReply = new JSONObject();jsReply.put("error", 0);jsReply.put("reason", "OK");// 生成訂單號 (模擬)int bookId = (int) (Math.random() * 1000);JSONObject data = new JSONObject();data.put("bookId", bookId);jsReply.put("data", data);System.out.println("客戶訂單:");System.out.println("訂單號:"+bookId);System.out.println("商品號:"+foodId);System.out.println("客戶名:"+clientName);System.out.println("客戶電話:"+clientPhone);System.out.println("客戶地址:"+clientAddress);System.out.println("下單時間:"+df.format(day));String replyText = jsReply.toString();// 采用Content-Length方式byte[] outdata = replyText.getBytes("UTF-8");response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); response.setContentLength(outdata.length);OutputStream out = response.getOutputStream();out.write(outdata);out.close();}


一個·是:ListFoodServlet.java

package my;import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.json.JSONArray; import org.json.JSONObject;public class ListFoodServlet extends HttpServlet {/*** Constructor of the object.*/public ListFoodServlet() {super();}/*** Destruction of the servlet. <br>*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//返回電影列表給用戶 JSONArray movies = new JSONArray();JSONObject m1 = new JSONObject();m1.put("id", 100001);m1.put("title", "脆皮雞");m1.put("drink", "冰紅茶");m1.put("price", "15");m1.put("merchant", "美團");movies.put(m1);JSONObject m2 = new JSONObject();m2.put("id", 100002);m2.put("title", "黃燜雞");m2.put("drink", "雪碧");m2.put("price", "18");m2.put("merchant", "餓了嗎");movies.put(m2);JSONObject m3 = new JSONObject();m3.put("id", 100003);m3.put("title", "重慶雞公煲");m3.put("drink", "礦泉水");m3.put("price", "18");m3.put("merchant", "百度外賣");movies.put(m3);JSONObject jsReply = new JSONObject();jsReply.put("error", 0); // 錯誤碼,0表示成功jsReply.put("reason", "OK"); // 錯誤描述jsReply.put("data", movies); // 數(shù)據(jù)String replyText = jsReply.toString();// 應答: 為了方便用客戶端的解析, 采用Content-Length方式byte[] outdata = replyText.getBytes("UTF-8");response.setContentType("text/plain"); // Content-Typeresponse.setCharacterEncoding("UTF-8"); // charset response.setContentLength(outdata.length);// Content-LengthOutputStream out = response.getOutputStream();out.write(outdata);out.close();} }


總結

以上是生活随笔為你收集整理的RESTful API实现APP订餐实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产高清久久 | 男女午夜网站 | 色综合久久88色综合天天 | 欧美另类在线播放 | 香蕉视频黄色在线观看 | 公侵犯人妻中文字慕一区二区 | 综合av| 国产亚洲性欧美日韩在线观看软件 | 久久在线看 | 欧美日韩国产电影 | 性中国xxx极品hd | 天天干夜夜拍 | 国产精品91视频 | 奇米影视欧美 | 深夜国产视频 | 国产不卡在线 | 欧美综合专区 | 国产日产欧美一区二区 | 影音先锋中文字幕一区二区 | 超碰97人人射妻 | 久久久久久综合 | 国产日韩精品在线观看 | 欧美亚洲一 | 国产成人欧美一区二区三区的 | 国产精品久久久久久免费观看 | 最新天堂中文在线 | 熟妇人妻久久中文字幕 | 男生插女生视频 | 日日日日操 | 国产精品久久免费视频 | 久久亚洲AV无码专区成人国产 | 麻豆激情视频 | 国产伦精品一区二区三区在线 | 国产精品美乳在线观看 | 男女裸体无遮挡做爰 | 91色网站 | 国产精品theporn | av三级网站 | 欧美福利在线视频 | 福利视频导航网 | 午夜资源网 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 男人操女人动态图 | 日韩欧美国产一区二区三区 | 日韩av一级 | 日本三级中文字幕 | 日本中文字幕一区 | 国产又粗又猛又爽又黄的视频一 | 国产福利91精品一区二区三区 | av首页在线观看 | 极品美女被c | 久久草视频在线 | 国产精品无码一区二区三区在线看 | 日本a免费 | 亚洲国产一区在线 | 台湾av在线 | 999久久久国产 | 天堂中文在线免费观看 | 欧美一级大片免费看 | 五月激情久久 | 欧美日韩在线观看一区二区 | 超碰h | 好吊妞这里有精品 | 欧美日韩国产电影 | 女人叫床很黄很污句子 | 久久久人人人 | 国产精品麻豆欧美日韩ww | wwwww在线观看| 日韩精品人妻一区 | 天降女子在线观看 | 国产夫妻自拍av | 亚洲精品一区二区三区四区五区 | 色综合久久88色综合天天 | 久色免费视频 | 善良的少妇伦理bd中字 | 国内精品一区二区 | 免费av网址在线 | av无码精品一区二区三区宅噜噜 | 日韩欧美视频一区二区三区 | 国产乱妇无码大片在线观看 | 亚洲成a人片在线www | 九九九在线 | 亚洲人成网站999久久久综合 | 手机av免费在线观看 | 二区视频在线观看 | aaaaaaa毛片| 日韩精品不卡 | 国产艳妇疯狂做爰视频 | 日本一区二区免费在线 | 日本一区二区三区电影在线观看 | 欧美理论视频 | 久久无码精品丰满人妻 | 中文字幕在线观看不卡 | 91久久精品日日躁夜夜躁国产 | 少妇肥臀大白屁股高清 | 白浆在线播放 | 精品国产伦一区二区三 | 很黄的网站在线观看 | 日韩污视频|