安卓向服务器发送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
安卓向服务器发送List数据相关推荐
- 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...
- android 上传文件到 c 服务器,android 怎么样用socket给C服务器 发送二进制数据
最近在写一个小APP,卡在android与服务器端通讯上了,大致需求是,android端发送二进制数据,文件头为0x00 0x08 0x0b,后面跟字符串的内容为abcd_efdgh, 结尾用0x00 ...
- Android 向服务器发送XML数据及调用webservice
首先讲一下webservice概念 可以看作是网络上的API,不过不是是通过new XXX().api()调用: 调用方式:客户端发送一段xml到服务器,在xml中指定要调用的方法的名称,以及各项参数 ...
- ActionScript接收socket服务器发送来的数据
原文地址:http://www.asp119.com/news/2009522181815_1.htm 从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可 ...
- Ajax学习系列——向服务器发送请求
1.如何发送请求? 如果需要向服务器发送请求,我们使用的是XMLHttpRequest对象中的open()和send()方法. var xhr = new XMLHttpRequest();//具体创 ...
- jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)
jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...
- WebSockets与服务器发送的事件/ EventSource
WebSockets和服务器发送事件都能够将数据推送到浏览器. 在我看来,它们似乎是竞争技术. 它们之间有什么区别? 您何时会选择一个? #1楼 根据caniuse.com: 96%的全球用户本机支持 ...
- fifaonline3服务器位置,fifaonline3 无法解析服务器发送的参数是怎么回事?
fifaonline3 无法解析服务器发送的参数是怎么回事? 本人姓罗名本:这是账号问题,跟网络无关,手动打完一局联赛,等比分出完就可以了 发布于 2020-06-01 06:02:05 丿欣少:无法 ...
- 【更新】JxBrowser v6.23发布,允许禁止与Google服务器自动共享数据
JxBrowser已更新至6.23版本,新版本将更省时.更安全.效果更好. JxBrowserv6.23包含以下功能和改进: 省时:允许您使用单个驱动程序在任何设备上进行打印,并减少Linux上的预启 ...
最新文章
- 服务器购买是有无系统,买服务器含不含操作系统
- 《JS权威指南学习总结--第九章 类和模板》
- JS校验金额格式的正则表达式
- OpenGL拆分视图
- HYSBZ 1588 营业额统计 平衡二叉树模板
- Objective-C 日记⑤ 内存管理、协议、Category 视频笔记
- 32 commons-lang包学习
- python函数对变量的作用_python函数对变量的作用及遵循的原则
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
- OpenStack实践系列②认证服务Keystone
- TCP UDP IP
- albert使用的中文语料
- 实现微信文章页面 http://mp.weixin.qq.com/s?__biz=MjM5MDI3OTAwMg==amp;mid=200337417amp;idx=1amp;sn=5959ed1...
- Implement Trie (Prefix Tree)
- [.NET开发] C#面向服务WebService从入门到精通
- 无刷直流电机反电动势过零检测_TI电机库源码
- 玩转C语言Socket网络编程
- bandicam去水印
- 在线图片转文字怎么转?这两种方法简单又实用!
- [9i] stuff 和 things 在表示“东西”时的细微区别