************************************************************服务器端代码**************************************************************************

Spring Web MVC(Servlet) 具体细节就不说了,比较不一样的地方,下面会注明!

1. web.xml 的内容如下:

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>FCAS</display-name>
  4. <servlet>
  5. <servlet-name>foodcenter</servlet-name>
  6. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  7. <load-on-startup>1</load-on-startup>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>foodcenter</servlet-name>
  11. <url-pattern>*.json</url-pattern>
  12. </servlet-mapping>
  13. </web-app>

2. foodcenter-servlet.xml 的内容如下:

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  11. <context:annotation-config/>
  12. <!-- Controller 类的注解标识-->
  13. <context:component-scan base-package="com.liuxi.foodcenter.controller"/>
  14. <!--这个ViewResolver 的具体原来没细究,不过CV战士们 中的一员,这样用是没问题的(参考官文) -->
  15. <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  16. <property name="mediaTypes">
  17. <map>
  18. <entry key="json" value="application/json"/> <!-- 告诉视图解析器 返回的类型为json 格式 -->
  19. </map>
  20. </property>
  21. <property name="defaultViews">
  22. <list>
  23. <!-- 这个 View 比较重要,ModelAndView 里的数据变成JSON -->
  24. <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
  25. </bean>
  26. </list>
  27. </property>
  28. </bean>
  29. <!--真正的项目,业务Bean 有专门对应的配置文件,这里为了简单起见,就写在这里了 -->
  30. <bean id="foodService" class="com.liuxi.food.service.FoodServiceImpl"/>
  31. </beans>

3. 子控制器FindFoodListController.java

[html] view plain copy print ?
  1. package com.liuxi.foodcenter.controller;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.servlet.ModelAndView;
  11. import com.liuxi.bean.Food;
  12. import com.liuxi.food.service.IFoodService;
  13. @Controller
  14. public class FindFoodListController {
  15. @Autowired @Qualifier("foodService")
  16. private IFoodService foodService;
  17. /** 根据餐菜的类别返回 该类别下的所有菜*/
  18. @RequestMapping("/findFoodList")
  19. public ModelAndView queryFoodList(@RequestParam("typeId") int typeId){
  20. List<Food> list=foodService.getFoodListByType(typeId);
  21. ModelAndView modelView=new ModelAndView();
  22. Map<String,Object> modelMap=new HashMap<String,Object>();
  23. modelMap.put("FOOD_LIST", list);
  24. modelMap.put("TYPE_ID", typeId);
  25. modelView.addAllObjects(modelMap);
  26. return modelView;
  27. }
  28. }

4. FoodServiceImpl.java

[html] view plain copy print ?
  1. package com.liuxi.food.service;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.liuxi.bean.Food;
  5. public class FoodServiceImpl implements IFoodService{
  6. @Override
  7. public List<Food> getFoodListByType(int typeId) {
  8. //这里本来要调DAO层接口的,这边暂时写死
  9. Food food1=new Food(1,1,"鱼香肉丝", 12.00,"好吃的不得了-鱼香肉丝",4.5,5.0);
  10. Food food2=new Food(2,1,"农家小炒肉", 15.00,"好吃的不得了-农家小炒肉",3.7,4.3);
  11. Food food3=new Food(3,1,"韭菜炒蛋", 10.00,"好吃的不得了-韭菜炒蛋",2.6,3.0);
  12. Food food4=new Food(4,1,"回锅肉", 13.00,"好吃的不得了-回锅肉",3.1,3.8);
  13. Food food5=new Food(5,1,"宫保鸡丁", 14.00,"好吃的不得了-宫保鸡丁",3.7,5.0);
  14. Food food6=new Food(6,1,"苦瓜炒蛋", 9.00,"好吃的不得了-宫保鸡丁",4.9,4.7);
  15. Food food7=new Food(7,1,"莴笋肉片", 10.00,"好吃的不得了-莴笋肉片",2.6,3.9);
  16. List<Food> list=new ArrayList<Food>();
  17. list.add(food1);
  18. list.add(food2);
  19. list.add(food3);
  20. list.add(food4);
  21. list.add(food5);
  22. list.add(food6);
  23. list.add(food7);
  24. return list;
  25. }
  26. }

5.IFoodService.java

[html] view plain copy print ?
  1. package com.liuxi.food.service;
  2. import java.util.List;
  3. import com.liuxi.bean.Food;
  4. public interface IFoodService {
  5. List<Food> getFoodListByType(int typeId);
  6. }

6.Food.java

[html] view plain copy print ?
  1. package com.liuxi.bean;
  2. public class Food {
  3. private int id; // ID
  4. private String name; // 菜名
  5. private double price; // 价格
  6. private String notes; // 菜的简要介绍
  7. private int foodTypeId; // 菜所属的类别
  8. private double kouWeiScore; // 口味的分值
  9. private double hotLevel; // 星级别
  10. public Food(int id, int foodTypeId, String name, double price,
  11. String notes, double kouWeiScore, double hotLevel) {
  12. this.id = id;
  13. this.name = name;
  14. this.price = price;
  15. this.notes = notes;
  16. this.foodTypeId = foodTypeId;
  17. this.kouWeiScore = kouWeiScore;
  18. this.hotLevel = hotLevel;
  19. }
  20. public Food() {
  21. }
  22. public int getId() {
  23. return id;
  24. }
  25. public void setId(int id) {
  26. this.id = id;
  27. }
  28. public String getName() {
  29. return name;
  30. }
  31. public void setName(String name) {
  32. this.name = name;
  33. }
  34. public double getPrice() {
  35. return price;
  36. }
  37. public void setPrice(double price) {
  38. this.price = price;
  39. }
  40. public String getNotes() {
  41. return notes;
  42. }
  43. public void setNotes(String notes) {
  44. this.notes = notes;
  45. }
  46. public int getFoodTypeId() {
  47. return foodTypeId;
  48. }
  49. public void setFoodTypeId(int foodTypeId) {
  50. this.foodTypeId = foodTypeId;
  51. }
  52. public double getKouWeiScore() {
  53. return kouWeiScore;
  54. }
  55. public void setKouWeiScore(double kouWeiScore) {
  56. this.kouWeiScore = kouWeiScore;
  57. }
  58. public double getHotLevel() {
  59. return hotLevel;
  60. }
  61. public void setHotLevel(double hotLevel) {
  62. this.hotLevel = hotLevel;
  63. }
  64. public String toString() {
  65. return id + "--" + name + "--" + price + "--" + notes + "--"
  66. + foodTypeId + "--" + kouWeiScore + "--" + hotLevel;
  67. }
  68. }

7.Spring Web MVC 中 将ModelAndView 中的数据自动转换成json ,靠的是jackjson 中 连个jar 包 (这个下载大本营里有下,花了我2积分哦)

jackson-core-asl-1.4.2.jar

jackson-mapper-asl-1.4.2.jar


*************************************以上是服务器端代码,已全部贴完!**********************************************

访问链接是: http://192.168.1.104:8088/FCAS/findFoodList.json?typeId=1


***************************************************************************Android 客户端 访问部分************************************************************

下面进入 Android 客户端访问部分(这里暂不贴 界面,用android 的单元测试 来 测试 服务器返回的json 数据是什么样的

8. GetFoodListTest.java

[java] view plain copy print ?
  1. package com.liuxi.takeorder.test;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.util.ArrayList;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.HttpStatus;
  7. import org.apache.http.NameValuePair;
  8. import org.apache.http.client.HttpClient;
  9. import org.apache.http.client.entity.UrlEncodedFormEntity;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.impl.client.DefaultHttpClient;
  12. import org.apache.http.message.BasicNameValuePair;
  13. import android.test.AndroidTestCase;
  14. import android.util.Log;
  15. public class GetFoodListTest extends AndroidTestCase {
  16. private static final String TAG="GetFoodListTest";
  17. public void testFindFoodList() {
  18. String uri="http://192.168.1.104:8088/FCAS/findFoodList.json?typeId=1";
  19. try{
  20. HttpClient httpClient=new DefaultHttpClient();
  21. //HttpPost 实现 HttpUriRequest 接口,HttpUriRequest接口 继承 HttpRequest
  22. HttpPost httpPostReq=new HttpPost(uri);
  23. ArrayList<NameValuePair> paramList=new ArrayList<NameValuePair>();
  24. NameValuePair param1=new BasicNameValuePair("typeId",String.valueOf(1));
  25. paramList.add(param1);
  26. httpPostReq.setEntity(new UrlEncodedFormEntity(paramList));
  27. HttpResponse resp=httpClient.execute(httpPostReq);
  28. if(resp.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  29. BufferedReader reader=new BufferedReader(
  30. new InputStreamReader(resp.getEntity().getContent())
  31. );
  32. StringBuffer result=new StringBuffer();
  33. String inputLine=null;
  34. while((inputLine=reader.readLine())!=null){
  35. result.append(inputLine);
  36. }
  37. Log.i(TAG, result.toString());
  38. }
  39. }catch(Exception e){
  40. Log.i(TAG,e.getMessage());
  41. }
  42. }
  43. }


9. 激动人心的时刻-----> 结果是啥?

日志记录为:

07-19 16:12:53.282: INFO/GetFoodListTest(1287): {"TYPE_ID":1,"FOOD_LIST":[{"name":"鱼香肉丝","id":1,"price":12.0,"notes":"好吃的不得了-鱼香肉丝","foodTypeId":1,"kouWeiScore":4.5,"hotLevel":5.0},{"name":"农家小炒肉","id":2,"price":15.0,"notes":"好吃的不得了-农家小炒肉","foodTypeId":1,"kouWeiScore":3.7,"hotLevel":4.3},{"name":"韭菜炒蛋","id":3,"price":10.0,"notes":"好吃的不得了-韭菜炒蛋","foodTypeId":1,"kouWeiScore":2.6,"hotLevel":3.0},{"name":"回锅肉","id":4,"price":13.0,"notes":"好吃的不得了-回锅肉","foodTypeId":1,"kouWeiScore":3.1,"hotLevel":3.8},{"name":"宫保鸡丁","id":5,"price":14.0,"notes":"好吃的不得了-宫保鸡丁","foodTypeId":1,"kouWeiScore":3.7,"hotLevel":5.0},{"name":"苦瓜炒蛋","id":6,"price":9.0,"notes":"好吃的不得了-宫保鸡丁","foodTypeId":1,"kouWeiScore":4.9,"hotLevel":4.7},{"name":"莴笋肉片","id":7,"price":10.0,"notes":"好吃的不得了-莴笋肉片","foodTypeId":1,"kouWeiScore":2.6,"hotLevel":3.9}]}


我把上面{} 里的东西 放到一个foodlist.json 文件中,格式化后的内容如下:

[html] view plain copy print ?
  1. {
  2. "TYPE_ID" : 1,
  3. "FOOD_LIST" : [{
  4. "name" : "鱼香肉丝",
  5. "id" : 1,
  6. "price" : 12.0,
  7. "notes" : "好吃的不得了-鱼香肉丝",
  8. "foodTypeId" : 1,
  9. "kouWeiScore" : 4.5,
  10. "hotLevel" : 5.0
  11. }, {
  12. "name" : "农家小炒肉",
  13. "id" : 2,
  14. "price" : 15.0,
  15. "notes" : "好吃的不得了-农家小炒肉",
  16. "foodTypeId" : 1,
  17. "kouWeiScore" : 3.7,
  18. "hotLevel" : 4.3
  19. }, {
  20. "name" : "韭菜炒蛋",
  21. "id" : 3,
  22. "price" : 10.0,
  23. "notes" : "好吃的不得了-韭菜炒蛋",
  24. "foodTypeId" : 1,
  25. "kouWeiScore" : 2.6,
  26. "hotLevel" : 3.0
  27. }, {
  28. "name" : "回锅肉",
  29. "id" : 4,
  30. "price" : 13.0,
  31. "notes" : "好吃的不得了-回锅肉",
  32. "foodTypeId" : 1,
  33. "kouWeiScore" : 3.1,
  34. "hotLevel" : 3.8
  35. }, {
  36. "name" : "宫保鸡丁",
  37. "id" : 5,
  38. "price" : 14.0,
  39. "notes" : "好吃的不得了-宫保鸡丁",
  40. "foodTypeId" : 1,
  41. "kouWeiScore" : 3.7,
  42. "hotLevel" : 5.0
  43. }, {
  44. "name" : "苦瓜炒蛋",
  45. "id" : 6,
  46. "price" : 9.0,
  47. "notes" : "好吃的不得了-宫保鸡丁",
  48. "foodTypeId" : 1,
  49. "kouWeiScore" : 4.9,
  50. "hotLevel" : 4.7
  51. }, {
  52. "name" : "莴笋肉片",
  53. "id" : 7,
  54. "price" : 10.0,
  55. "notes" : "好吃的不得了-莴笋肉片",
  56. "foodTypeId" : 1,
  57. "kouWeiScore" : 2.6,
  58. "hotLevel" : 3.9
  59. }]
  60. }

10. OK! 返回数据正确。


************************************************Spring 是用ObjectMapper 将 数据转换成json 数据的*****************************

下面自己写了个转换的例子:

ObjectMapperTest.java

[html] view plain copy print ?
  1. package com.bean.test;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.codehaus.jackson.map.ObjectMapper;
  7. public class ObjectMapperTest {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) throws Exception {
  12. ObjectMapper mapper=new ObjectMapper();
  13. Map<String,Object> foodListData=new HashMap<String,Object>();
  14. List list=new ArrayList();
  15. Map<String,Object> foodData=new HashMap<String,Object>();
  16. foodData.put("id", 1);
  17. foodData.put("name", "鱼香肉丝");
  18. foodData.put("price", 12.00);
  19. foodData.put("notes", "好吃啊,真的!");
  20. foodData.put("kouWeiScore", 4.5);
  21. foodData.put("hotLevel", 5.0);
  22. list.add(foodData);
  23. foodListData.put("foodlist", list);
  24. String str=mapper.writeValueAsString(foodListData);
  25. System.out.println(str);
  26. }
  27. }

上述程序输出的是:

{"foodlist":[{"id":1,"kouWeiScore":4.5,"price":12.0,"hotLevel":5.0,"name":"鱼香肉丝","notes":"好吃啊,真的!"}]}

format 下:

{
"foodlist" : [{
"id" : 1,
"kouWeiScore" : 4.5,
"price" : 12.0,
"hotLevel" : 5.0,
"name" : "鱼香肉丝",
"notes" : "好吃啊,真的!"
}]
}


好吧,就到这里了。基本架子搭好,接着,就用这个架子来 实现 Android 客户端+Spring MVC 去做后面的项目。继续挖矿。。。。

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 如何开发一个适配Android和iOS双平台的Re
  2. Android多进程使用及其带来的问题
  3. Android 5.0后截屏,无需root
  4. Android实现字幕滚动的方法
  5. 如何搭建Repo服务器端
  6. Android NDK入门理解
  7. Android 控件Edittext详解
  8. android耳机状态的检测
  9. 「转」Android Design in Action —— 十
  10. A015-布局之LinearLayout