第一步:

首先写一个自定义的JavaBean,以UserInfo.java为例,需要实现对象序列化的接口,因为之后输出流对象需要实现输出可序列化的对象。不这样的话,后续时发送时会报异常

  1. package xl.java.bean;
  2. import java.io.Serializable;
  3. /**
  4. * 用户信息
  5. * @author xl 2012-9-20
  6. */
  7. public class UserInfo implements Serializable
  8. {
  9. private static final long serialVersionUID = 1L;
  10. /**
  11. * 用户名
  12. */
  13. private String UserName;
  14. /**
  15. * 密码
  16. */
  17. private String Password;
  18. /**
  19. * 昵称
  20. */
  21. private String NickName;
  22. /**
  23. * QQ号
  24. */
  25. private int QQNumber;
  26. /**
  27. * 电话号
  28. */
  29. private String TelNumber;
  30. /**
  31. * 年龄
  32. */
  33. private int Age;
  34. public String getUserName()
  35. {
  36. return UserName;
  37. }
  38. public void setUserName(String userName)
  39. {
  40. UserName = userName;
  41. }
  42. public String getPassword()
  43. {
  44. return Password;
  45. }
  46. public void setPassword(String password)
  47. {
  48. Password = password;
  49. }
  50. public String getNickName()
  51. {
  52. return NickName;
  53. }
  54. public void setNickName(String nickName)
  55. {
  56. NickName = nickName;
  57. }
  58. public int getQQNumber()
  59. {
  60. return QQNumber;
  61. }
  62. public void setQQNumber(int qQNumber)
  63. {
  64. QQNumber = qQNumber;
  65. }
  66. public String getTelNumber()
  67. {
  68. return TelNumber;
  69. }
  70. public void setTelNumber(String telNumber)
  71. {
  72. TelNumber = telNumber;
  73. }
  74. public int getAge()
  75. {
  76. return Age;
  77. }
  78. public void setAge(int age)
  79. {
  80. Age = age;
  81. }
  82. }

注意,服务器与客户端的javabean包名必须一致,不然的话会报ClassNotFoundException异常。

第二步:

编写客户端模拟发送数据的类SendData.java。中间一大段的连接处理,具体解释可参考:

JDK中的URLConnection参数详解 - wlzf6296149的专栏 - 博客频道 - CSDN.NET

  1. package xl.java.send;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.io.OutputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.net.URLConnection;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import xl.java.bean.UserInfo;
  12. /**
  13. * 模拟发送数据
  14. * @author xl 2012-9-20
  15. *
  16. */
  17. public class SendData
  18. {
  19. private static final String BASIC_URL_QUEST =
  20. "http://192.168.1.1:8080/test/TestServlet";
  21. public static void main(String[] args)
  22. {
  23. SendData senddata=new SendData();
  24. try
  25. {
  26. senddata.sendDataToServer();
  27. }
  28. catch (IOException e)
  29. {
  30. e.printStackTrace();
  31. }
  32. }
  33. /**
  34. * 上传处理结果
  35. *
  36. * @throws IOException
  37. *
  38. */
  39. private void sendDataToServer() throws IOException
  40. {
  41. //用于servlet判别请求,执行相应方法
  42. String QuestId = "SubmitUserInfoList";
  43. //模拟发送自定义类型的List数据
  44. List<UserInfo> listdata = new ArrayList<UserInfo>();
  45. for (int i = 0; i < 10; i++)
  46. {
  47. UserInfo li = new UserInfo();
  48. li.setUserName("XL" + i);
  49. li.setPassword("00000" + i);
  50. li.setQQNumber(1234567 + i);
  51. li.setTelNumber("15012344321" + i);
  52. li.setNickName("xiaolang" + i);
  53. li.setAge(18 + i);
  54. listdata.add(li);
  55. }
  56. URL url = new URL(BASIC_URL_QUEST);
  57. try
  58. {
  59. URLConnection con = url.openConnection();
  60. HttpURLConnection httpUrlConnection = (HttpURLConnection) con;
  61. httpUrlConnection.setUseCaches(false);
  62. httpUrlConnection.setDoOutput(true);
  63. httpUrlConnection.setDoInput(true);
  64. httpUrlConnection.setRequestProperty("Content-type",
  65. "application/x-java-serialized-object");
  66. //不设置这个默认为Get,服务器会没反应,不知道什么情况,
  67. //纠结了很久,改成Post的话,servlet里的
  68. //doPost方法就有反应了
  69. httpUrlConnection.setRequestMethod("POST");
  70. httpUrlConnection.connect();
  71. OutputStream outStrm = httpUrlConnection.getOutputStream();
  72. ObjectOutputStream oos = new ObjectOutputStream(outStrm);
  73. //输出流第一段数据是QuestId的值
  74. oos.writeObject(QuestId);
  75. //第二段数据是List数据
  76. oos.writeObject(listdata); oos.flush();
  77. oos.close();
  78. InputStream inStrm = httpUrlConnection.getInputStream();
  79. System.out.println("数据发送成功!");
  80. }
  81. catch (Exception e)
  82. {
  83. e.printStackTrace();
  84. }
  85. }
  86. }

编写servlet,接收数据

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.ObjectInputStream;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.List;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import xl.java.bean.UserInfo;
  14. /**
  15. * @author xl 2012-9-20
  16. *
  17. */
  18. public class TestServlet extends HttpServlet
  19. {
  20. private static final long serialVersionUID = 1L;
  21. private Connection mConnection = null;
  22. private Statement mStatement = null;
  23. private String QuestId = "";
  24. private static final String SUBMIT_USERINFO_LIST = "SubmitUserInfoList";// 客户端提交到用户信息
  25. protected void doPost(HttpServletRequest request,
  26. HttpServletResponse response)
  27. {
  28. System.out.println("________---------doPost--------_____________");
  29. try
  30. {
  31. // 链接数据库
  32. Class.forName("org.gjt.mm.<a href="http://lib.csdn.net/base/14" class="replace_word" title="undefined" target="_blank" style="color: rgb(223, 52, 52); font-weight: bold;">mysql</a>.Driver").newInstance();
  33. mConnection =
  34. DriverManager
  35. .getConnection("jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=UTF-8");
  36. mStatement =
  37. mConnection.createStatement(
  38. ResultSet.TYPE_SCROLL_INSENSITIVE,
  39. ResultSet.CONCUR_READ_ONLY);
  40. // 如果不是通过URL的Get形式上传数据时,调用此方法,获取上传的list数据
  41. getListDataByObjectInputStream(request, response);
  42. }
  43. catch (SQLException e)
  44. {
  45. e.printStackTrace();
  46. }
  47. catch (InstantiationException e)
  48. {
  49. e.printStackTrace();
  50. }
  51. catch (IllegalAccessException e)
  52. {
  53. e.printStackTrace();
  54. }
  55. catch (ClassNotFoundException e)
  56. {
  57. e.printStackTrace();
  58. }
  59. catch (IOException e)
  60. {
  61. e.printStackTrace();
  62. }
  63. }
  64. /**
  65. * 获取输入流中的数据
  66. *
  67. * @param request
  68. * @param response
  69. * @throws IOException
  70. * @throws ClassNotFoundException
  71. */
  72. private void getListDataByObjectInputStream(HttpServletRequest request,
  73. HttpServletResponse response) throws IOException,
  74. ClassNotFoundException
  75. {
  76. System.out.println("---------getListDataByObjectInputStream--------");
  77. response.setContentType("text/html");
  78. InputStream inStream = request.getInputStream();
  79. ObjectInputStream objInStream = new ObjectInputStream(inStream);
  80. QuestId = (String) objInStream.readObject();
  81. @SuppressWarnings("unchecked")
  82. List<UserInfo> inList = (List<UserInfo>) objInStream.readObject();
  83. if (QuestId.equals(SUBMIT_USERINFO_LIST))
  84. {
  85. System.out.println("QuestId.equals(SUBMIT_ORDER_LIST)");
  86. submitOrderList(request, response, inList);
  87. }
  88. objInStream.close();
  89. System.out.println("objInStream.close()");
  90. }
  91. /**
  92. * @param request
  93. * @param response
  94. * @param inList
  95. */
  96. private void submitOrderList(HttpServletRequest request,
  97. HttpServletResponse response, List<UserInfo> inList)
  98. {
  99. // 获取数据,插入数据库
  100. for (UserInfo item : inList)
  101. {
  102. System.out.println("UserName=" + item.getUserName());
  103. System.out.println("Password=" + item.getPassword());
  104. System.out.println("NickName=" + item.getNickName());
  105. System.out.println("QQNumber=" + item.getQQNumber());
  106. System.out.println("TelNumber=" + item.getTelNumber());
  107. System.out.println("Age=" + item.getAge() + "\n");
  108. }
  109. /**
  110. * 插入数据库代码可以写在这..
  111. */
  112. }
  113. }

最后:

运行SendData.java文件,可看到控制台输出,根据前面的设定我们知道,客户端和服务端已经建立连接,并且数据成功发送给了服务端

参考链接:

关于servlet服务端接收客户端发送的List

安卓向服务器发送List数据的更多相关文章

  1. libcurl HTTP POST请求向服务器发送json数据【转】

    转载:http://blog.csdn.net/dgyanyong/article/details/14166217 转载:http://blog.csdn.net/th_gsb/article/de ...

  2. libcurl HTTP POST请求向服务器发送json数据

    转载:http://blog.csdn.net/dgyanyong/article/details/14166217 转载:http://blog.csdn.net/th_gsb/article/de ...

  3. curl向web服务器发送json数据

    c++使用libcurl: /* *g++ demo.cpp -g -Wall -lcurl */ #include <string.h> #include <stdlib.h> ...

  4. iOS开发网络篇—发送json数据给服务器以及多值参数

    iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...

  5. 【转】iOS开发网络篇—发送json数据给服务器以及多值参数

    原文: http://www.cnblogs.com/wendingding/p/3950132.html 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 ...

  6. ActionScript接收socket服务器发送来的数据

    原文地址:http://www.asp119.com/news/2009522181815_1.htm 从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可 ...

  7. ajax-向服务器发送请求

    ajax-向服务器发送请求 1.将请求发送到服务器,使用XMLHttpRequest对象的 open() 和 send() 方法.     xmlhttp. open(method,url,async ...

  8. AJAX向服务器发送请求

    使用 XMLHttpRequest 对象的 open() 和 send() 方法: 方法 描述 open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求. metho ...

  9. 介绍一款chrom浏览器插件 DHC是一款使用chrome模拟REST客户端向服务器发送测试数据的谷歌浏览器插件

    先打个小广告哈 公司招java架构师,月薪25K以上,负责电商平台架构工作,工作地点在北京 1号线永安里站 附近,如有意向 请把简历发我邮箱jia6235@163.com 可以内部推荐. DHC是一款 ...

随机推荐

  1. 使用Android Studio搭建Android集成开发环境

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...

  2. MyEclipse------黑科技

    自动计算器(+,-,*,/) <form method="post" oninput="o.value = parseInt(a.value) + parseInt ...

  3. 将ECSHOP会员注册页面的Email修改成非必填项

    将ECSHOP会员注册页面的Email修改成非必填项 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2011-07-29   有人说,在后台的 “会员注册项设置 ”里面 ...

  4. C#中Delegate和Event以及它们的区别(转载)

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

  5. Java-优秀博客推荐

    一. TCP/IP Socket 兰亭风雨的专栏: http://blog.csdn.net/ns_code 二. NIO 并发编程网-Java NIO系列教程:http://ifeve.com/ch ...

  6. javascript检验工具的比较

    作者是 Jani Hartikainen,英文好的同学直接阅读原文. 原文 当写js代码的时候,一个校验工具可以帮助我避免愚蠢的错误.尽管我有许多年的经验,但是我仍然有变量命名不正确.产生语法错误以及 ...

  7. POJ 2442 Sequence

    Pro. 1 给定k个有序表,取其中前n小的数字.组成一个新表,求该表? 算法: 由于  a1[1] < a1[2] < a1[3] ... <a1[n] a2[1] < a2 ...

  8. BC.36.Gunner(hash)

    Gunner  Accepts: 391  Submissions: 1397  Time Limit: 8000/4000 MS (Java/Others)  Memory Limit: 65536 ...

  9. ADF成长记1--认识ADF

    2014-07-08 近段时间由于公司项目需要,开始接触Oracle ADF.都说有事没事,上百度,但是对于IT技术而言,上百度还真是不一定好使,至于谷歌嘛,很不巧的进不去了.不过网上ADF的资料当真 ...

  10. NGUI无限滑动

    http://www.unity蛮牛.com/blog-9383-1391.html 最近由于工作需要,就开始研究NGUI滑动.刚开始参考NGUI自带的循环滑动,利用隐藏和显示,提高GPU的渲染,但是 ...