第一步:

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

package xl.java.bean;  import java.io.Serializable;  /** * 用户信息 * @author xl 2012-9-20 */
public class UserInfo implements Serializable
{  private static final long serialVersionUID = 1L;  /** * 用户名 */  private String UserName;  /** * 密码 */  private String Password;  /** * 昵称 */  private String NickName;  /** * QQ号 */  private int QQNumber;  /** * 电话号 */  private String TelNumber;  /** * 年龄 */  private int Age;  public String getUserName()  {  return UserName;  }  public void setUserName(String userName)  {  UserName = userName;  }  public String getPassword()  {  return Password;  }  public void setPassword(String password)  {  Password = password;  }  public String getNickName()  {  return NickName;  }  public void setNickName(String nickName)  {  NickName = nickName;  }  public int getQQNumber()  {  return QQNumber;  }  public void setQQNumber(int qQNumber)  {  QQNumber = qQNumber;  }  public String getTelNumber()  {  return TelNumber;  }  public void setTelNumber(String telNumber)  {  TelNumber = telNumber;  }  public int getAge()  {  return Age;  }  public void setAge(int age)  {  Age = age;  }
}  

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

第二步:

编写客户端模拟发送数据的类SendData.java。中间一大段的连接处理,具体解释可参考:
JDK中的URLConnection参数详解 - wlzf6296149的专栏 - 博客频道 - CSDN.NET

package xl.java.send;  import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;  import xl.java.bean.UserInfo;  /** * 模拟发送数据 * @author xl 2012-9-20 *  */
public class SendData
{  private static final String BASIC_URL_QUEST =  "http://192.168.1.1:8080/test/TestServlet";  public static void main(String[] args)  {  SendData senddata=new SendData();  try  {  senddata.sendDataToServer();  }  catch (IOException e)  {  e.printStackTrace();  }  }  /** * 上传处理结果 *  * @throws IOException *  */  private void sendDataToServer() throws IOException  {  //用于servlet判别请求,执行相应方法  String QuestId = "SubmitUserInfoList";  //模拟发送自定义类型的List数据  List<UserInfo> listdata = new ArrayList<UserInfo>();  for (int i = 0; i < 10; i++)  {  UserInfo li = new UserInfo();  li.setUserName("XL" + i);  li.setPassword("00000" + i);  li.setQQNumber(1234567 + i);  li.setTelNumber("15012344321" + i);  li.setNickName("xiaolang" + i);  li.setAge(18 + i);  listdata.add(li);  }  URL url = new URL(BASIC_URL_QUEST);  try  {  URLConnection con = url.openConnection();  HttpURLConnection httpUrlConnection = (HttpURLConnection) con;  httpUrlConnection.setUseCaches(false);  httpUrlConnection.setDoOutput(true);  httpUrlConnection.setDoInput(true);  httpUrlConnection.setRequestProperty("Content-type",  "application/x-java-serialized-object");  //不设置这个默认为Get,服务器会没反应,不知道什么情况,  //纠结了很久,改成Post的话,servlet里的  //doPost方法就有反应了  httpUrlConnection.setRequestMethod("POST");  httpUrlConnection.connect();  OutputStream outStrm = httpUrlConnection.getOutputStream();  ObjectOutputStream oos = new ObjectOutputStream(outStrm);  //输出流第一段数据是QuestId的值  oos.writeObject(QuestId);  //第二段数据是List数据  oos.writeObject(listdata);      oos.flush();  oos.close();  InputStream inStrm = httpUrlConnection.getInputStream();  System.out.println("数据发送成功!");  }  catch (Exception e)  {  e.printStackTrace();  }  }
}  

编写servlet,接收数据

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;  import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;  import xl.java.bean.UserInfo;  /** * @author xl 2012-9-20 *  */
public class TestServlet extends HttpServlet
{  private static final long serialVersionUID = 1L;  private Connection mConnection = null;  private Statement mStatement = null;  private String QuestId = "";  private static final String SUBMIT_USERINFO_LIST = "SubmitUserInfoList";// 客户端提交到用户信息  protected void doPost(HttpServletRequest request,  HttpServletResponse response)  {  System.out.println("________---------doPost--------_____________");  try  {  // 链接数据库  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();  mConnection =  DriverManager  .getConnection("jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=UTF-8");  mStatement =  mConnection.createStatement(  ResultSet.TYPE_SCROLL_INSENSITIVE,  ResultSet.CONCUR_READ_ONLY);  // 如果不是通过URL的Get形式上传数据时,调用此方法,获取上传的list数据  getListDataByObjectInputStream(request, response);  }  catch (SQLException e)  {  e.printStackTrace();  }  catch (InstantiationException e)  {  e.printStackTrace();  }  catch (IllegalAccessException e)  {  e.printStackTrace();  }  catch (ClassNotFoundException e)  {  e.printStackTrace();  }  catch (IOException e)  {  e.printStackTrace();  }  }  /** * 获取输入流中的数据 *  * @param request * @param response * @throws IOException * @throws ClassNotFoundException */  private void getListDataByObjectInputStream(HttpServletRequest request,  HttpServletResponse response) throws IOException,  ClassNotFoundException  {  System.out.println("---------getListDataByObjectInputStream--------");  response.setContentType("text/html");  InputStream inStream = request.getInputStream();  ObjectInputStream objInStream = new ObjectInputStream(inStream);  QuestId = (String) objInStream.readObject();  @SuppressWarnings("unchecked")  List<UserInfo> inList = (List<UserInfo>) objInStream.readObject();  if (QuestId.equals(SUBMIT_USERINFO_LIST))  {  System.out.println("QuestId.equals(SUBMIT_ORDER_LIST)");  submitOrderList(request, response, inList);  }  objInStream.close();  System.out.println("objInStream.close()");  }  /** * @param request * @param response * @param inList */  private void submitOrderList(HttpServletRequest request,  HttpServletResponse response, List<UserInfo> inList)  {  // 获取数据,插入数据库  for (UserInfo item : inList)  {  System.out.println("UserName=" + item.getUserName());  System.out.println("Password=" + item.getPassword());  System.out.println("NickName=" + item.getNickName());  System.out.println("QQNumber=" + item.getQQNumber());  System.out.println("TelNumber=" + item.getTelNumber());  System.out.println("Age=" + item.getAge() + "\n");  }  /** * 插入数据库代码可以写在这.. */  }
}  

最后:

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

参考链接:

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

安卓向服务器发送List数据相关推荐

  1. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...

  2. android 上传文件到 c 服务器,android 怎么样用socket给C服务器 发送二进制数据

    最近在写一个小APP,卡在android与服务器端通讯上了,大致需求是,android端发送二进制数据,文件头为0x00 0x08 0x0b,后面跟字符串的内容为abcd_efdgh, 结尾用0x00 ...

  3. Android 向服务器发送XML数据及调用webservice

    首先讲一下webservice概念 可以看作是网络上的API,不过不是是通过new XXX().api()调用: 调用方式:客户端发送一段xml到服务器,在xml中指定要调用的方法的名称,以及各项参数 ...

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

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

  5. Ajax学习系列——向服务器发送请求

    1.如何发送请求? 如果需要向服务器发送请求,我们使用的是XMLHttpRequest对象中的open()和send()方法. var xhr = new XMLHttpRequest();//具体创 ...

  6. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  7. WebSockets与服务器发送的事件/ EventSource

    WebSockets和服务器发送事件都能够将数据推送到浏览器. 在我看来,它们似乎是竞争技术. 它们之间有什么区别? 您何时会选择一个? #1楼 根据caniuse.com: 96%的全球用户本机支持 ...

  8. fifaonline3服务器位置,fifaonline3 无法解析服务器发送的参数是怎么回事?

    fifaonline3 无法解析服务器发送的参数是怎么回事? 本人姓罗名本:这是账号问题,跟网络无关,手动打完一局联赛,等比分出完就可以了 发布于 2020-06-01 06:02:05 丿欣少:无法 ...

  9. 【更新】JxBrowser v6.23发布,允许禁止与Google服务器自动共享数据

    JxBrowser已更新至6.23版本,新版本将更省时.更安全.效果更好. JxBrowserv6.23包含以下功能和改进: 省时:允许您使用单个驱动程序在任何设备上进行打印,并减少Linux上的预启 ...

最新文章

  1. 服务器购买是有无系统,买服务器含不含操作系统
  2. 《JS权威指南学习总结--第九章 类和模板》
  3. JS校验金额格式的正则表达式
  4. OpenGL拆分视图
  5. HYSBZ 1588 营业额统计 平衡二叉树模板
  6. Objective-C 日记⑤ 内存管理、协议、Category 视频笔记
  7. 32 commons-lang包学习
  8. python函数对变量的作用_python函数对变量的作用及遵循的原则
  9. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
  10. OpenStack实践系列②认证服务Keystone
  11. TCP UDP IP
  12. albert使用的中文语料
  13. 实现微信文章页面 http://mp.weixin.qq.com/s?__biz=MjM5MDI3OTAwMg==amp;mid=200337417amp;idx=1amp;sn=5959ed1...
  14. Implement Trie (Prefix Tree)
  15. [.NET开发] C#面向服务WebService从入门到精通
  16. 无刷直流电机反电动势过零检测_TI电机库源码
  17. 玩转C语言Socket网络编程
  18. bandicam去水印
  19. 在线图片转文字怎么转?这两种方法简单又实用!
  20. [9i] stuff 和 things 在表示“东西”时的细微区别

热门文章

  1. 共同一作,会被认可吗?
  2. 如何评价一个推荐系统的好坏?
  3. 【小夕精选】如何优雅而时髦的解决不均衡分类问题
  4. 推荐系统经典论文学习
  5. Memcached 使用 及.NET客户端调用
  6. JQuery Tips
  7. 传入一个MapString,Long 返回它按value排序后的结果
  8. PHP正则匹配到2个字符串之间的内容,匹配HTML便签内容
  9. AC日记——Mato的文件管理 bzoj 3289
  10. ansbile简单应用