安卓向服务器发送List数据

第一步:

首先写一个自定义的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年全球自动驾驶法律政策研究 | 附报告下载

来源&#xff1a;腾讯研究院摘要&#xff1a;2018年9月13日&#xff0c;在中国法学会研究部、腾讯研究院联合举办的“‘法律人的互联网思维’系列研修会第二期——自动驾驶汽车的技术、产业和法律维度”上&#xff0c;腾讯研究院发布《2018年全球自动驾驶法律政策研究报告》。0…

《Python 黑科技》探查Mysql数据库,输出数据质量报告

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 🐶一、环境准备 🐱二、学习目标

网络字节序 —— 主机字节序 (Socket编程) 转

在对IP地址结构体SOCKADDR_IN赋值的时候&#xff0c;经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析&#xff0c;会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序&#xff0c;什么是…

全球最具影响力AI机构TOP100排名:中国5所高校1所研究院入围

来源&#xff1a;学术头条&#xff08;SciTouTiao&#xff09;现在“人工智能”&#xff08;ArtificialIntelligence&#xff09;一词时常“做客”各大媒体平台&#xff0c;成为人们所关注的热点话题&#xff0c;而在学术圈&#xff0c;AI技术同样也是最具活力与吸引力的研究课…

安卓开源库之动画篇

本文主要介绍收集了笔者所用过的开源动画库&#xff0c;达到一些比较好看的效果。 一个富有动感的 Sheet 链接&#xff1a; zzz40500/AndroidSweetSheet: 一个富有动感的Sheet(选择器) 效果如下 示例代码 package com.zj.testsheet;import android.os.Bundle; import andr…

《Python 黑科技》代理ip奇技淫巧

点赞 ➕ 评论 ➕ 收藏 三连再看你最帅 目录 &#x1f41b; 1、什么是住宅动态ip&#xff1f; &#x1f98b; 1.1 动态ip优点是什么&#xff1f; &#x1f40c; 1.2 环境准备 &#x1f41e; 1.3 获取代理ip &#x1f41c; 2、使用代理IP &#x1f424; 2.1 浏览器使用代理…

【转】android Notification 的使用

http://www.cnblogs.com/newcj/archive/2011/03/14/1983782.html Intent.FLAG_ACTIVITY_CLEAR_TOP &#xff1a;如果在当前Task中&#xff0c;有要启动的Activity&#xff0c;那么把该Acitivity之前的所有Activity都关掉&#xff0c;并把此Activity置前以避免创建Activity的实例…

MIT发布2018年全球10大突破性技术!

来源&#xff1a; 数字化企业作为全球最为著名的技术榜单之一&#xff0c;《麻省理工科技评论》全球十大突破性技术具备极大的全球影响力和权威性&#xff0c;至今已经举办了18年。每年上榜的技术突破&#xff0c;有的已经在现实中得以应用&#xff0c;有的还尚需时日&#xff…

Android实现监测网络状态

本文主要用到了安卓监测网络状态变化功能&#xff0c;实现了WIFI,3G,无网络状态切换时发出通知的功能。 主要知识点 servicebroadcast接口回调实现 service的基本知识 service可分为 按运行地点分类 本地服务 远程服务 按按运行类型分类&#xff1a; 前台服务后台服务按…

《Python 黑科技》10万粉丝头像千图成像(撩对象)

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 🍏 1、效果预览 🍎 2、代码实现 🍑 2.1 获取粉丝列表

jni 步骤

这是我转的文章&#xff0c;是篇外文翻译&#xff0c;将介绍如何学习安装 Android NDK 并开始使用它。在这一教程结束后&#xff0c;将创建你自己的项目&#xff0c;从 Java 代码简单地调用原生C 语言代码。教程细节技术&#xff1a;Android SDK、NDK、C 语言难度&#xff1a;进…

德勤:2025年汽车行业价值链的四个合理情境

来源&#xff1a;亿欧摘要&#xff1a;近日&#xff0c;德勤发布《未来汽车行业价值链&#xff1a;2025年以后》&#xff0c;假设在大部分整车企业都有变革意愿的情境下&#xff0c;识别出四个2025年整车企业价值链可能具有的合理设定。随着自动驾驶、共享经济等新技术以及新商…

你真的会用 regexp_replace 吗?

一、替换单个 方法1&#xff1a;select regexp_replace(asdgggg,([asd]),"aaa") 方法2&#xff1a;select regexp_replace(asdgggg,asd,"aaa") 二、替换多个 目标&#xff1a;一次性替换掉 [,],",三个特殊字符 方法1&#xff1a;SELECT regexp_repl…

盘点英特尔、苹果、高通、AMD 处理器重大 Bug,硬件的坑软件能填?

来源&#xff1a;21ic电子网英特尔的CPU存在两大漏洞 ——Meltdown 和 Spectre&#xff0c;波及自 1995 年以来所有使用英特尔芯片的硬件设备。不止 Linux、Android、Windows、苹果 OS X 等操作系统&#xff0c;AWS、Azure、谷歌云等云计算提供商均受到影响&#xff0c;其威胁范…

java读写html文件时出现中文乱码问题的解决方法

最近在做HTML静态生成&#xff0c;需要从硬盘上把模版文件的内容读出来。然后&#xff0c;替换相关标签写到指定的文件中。无论是读写&#xff0c;都遇到了中文乱码问题。试过多种方法&#xff0c;发现下面一种可以避免中文乱码。&#xff08;无论读取还是写入一定要进行编码转…

Android实现网络音乐播放器

本文是一个简单的音乐播放器 布局代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layo…

《Python 黑科技》程序员必须会的代理ip小技巧

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 一、🚖 why 代理 ip 第一,独享 IP 提高网络速度

每天一个linux命令(54):ping命令

Linux系统的ping命令是常用的网络命令&#xff0c;它通常用来测试与目标主机的连通性&#xff0c;我们经常会说“ping一下某机器&#xff0c;看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机&#xff08…

【干货51页PPT】深度学习理论理解探索

来源&#xff1a;专知普林斯顿大学计算机科学系教授Sanjeev Arora做了深度学习理论理解探索的报告&#xff0c;包括三个部分&#xff1a;Why overparametrization and or overprovisioning?Optimization in deep learningTheory for Generative Models and Generative Adversa…

新星计划·第三季【博文流量密码公开课】

一、优质的内容 刚开始写博客的小伙伴&#xff0c;其不可漫无目的的写&#xff0c;到头来对自己的技术沉淀毫无帮助&#xff0c;升职加薪跳槽也不加分&#xff0c;更无法通过付费专栏等方式进行变现&#xff0c;到头来一无所获&#xff01; 强烈建议大家提前规划写什么方向的…