android虽然内置了apache的HttpClient组件来实现客户端向服务器端提交数据,为了便于理解其底层原理,下面例子是通过URL获得Connection,并获得其输出流向服务器发送数据
1.新建一个web项目TestAndroid,我用到了struts2,引入相应的jar包,只需几个核心包就够了,多了容易报错,它们分别是
commons-logging-1.0.4.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
commons-fileupload-1.2.1.jar
2.新建一个action
package com.lamp.action;
public class LoginAction{
private String id = null;
private String name = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
System.out.println(this.id + this.name);
return "success";
}
}
3.在struts.xml中对action进行相应配置
<package name="lamp" extends="struts-default">
<action name="login" class="com.lamp.action.LoginAction">
<result name="success">/WEB-INF/page/success.jsp</result>
<result name="error">/WEB-INF/page/error.jsp</result>
</action>
</package>
4.最后在web.xml中对struts进行启动配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此web配置完成
5.新建一个android工程,并编写一个工具类实现向服务器端发送数据
package com.lamp.util;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
public class NetTool {
/**
*
* @param urlPath 请求路径
* @param params Map中key为请求参数,value为请求参数的值
* @param encoding 编码方式
* @return
* @throws Exception
*/
//通过post向服务器端发送数据,并获得服务器端输出流
public static InputStream getInputStreamByPost(String urlPath,Map<String,String> params,String encoding) throws Exception{
StringBuffer sb = new StringBuffer();
for(Map.Entry<String,String> entry:params.entrySet()){
sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), encoding));
sb.append("&");
}
String data = sb.deleteCharAt(sb.length()-1).toString();
URL url = new URL(urlPath);
//打开连接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置提交方式
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
//post方式不能使用缓存
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
//设置连接超时时间
conn.setConnectTimeout(6*1000);
//配置本次连接的Content-Type,配置为application/x-www-form-urlencoded
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//维持长连接
conn.setRequestProperty("Connection", "Keep-Alive");
//设置浏览器编码
conn.setRequestProperty("Charset", "UTF-8");
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
//将请求参数数据向服务器端发送
dos.writeBytes(data);
dos.flush();
dos.close();
if(conn.getResponseCode() == 200){
//获得服务器端输出流
return conn.getInputStream();
}
return null;
}
//通过输入流获得字节数组
public static byte[] readStream(InputStream is) throws Exception {
byte[] buffer = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = 0;
while((len=is.read(buffer)) != -1){
bos.write(buffer, 0, len);
}
is.close();
return bos.toByteArray();
}
}
6.编写一个测试类
package com.lamp.activity;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import android.test.AndroidTestCase;
import android.util.Log;
import com.lamp.util.NetTool;
public class TestPostData extends AndroidTestCase {
private static final String TAG = "TestPostData";
public void test() throws Exception {
//请求参数键-值对
Map<String,String> map = new HashMap<String,String>();
map.put("id", "123456");
map.put("name", "李四");
//服务器请求路径
String urlPath = "http://ip地址:8080/TestAndroid/login";
InputStream is = NetTool.getInputStreamByPost(urlPath, map, "UTF-8");
byte[] data = NetTool.readStream(is);
Log.i(TAG, new String(data));
}
}
记得要在AndroidManifest.xml文件中注册访问网络权限以及单元测试所需的配置
<!-- 注册访问网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
首先将建立的web项目在应用服务器中部署并运行起来,然后在android工程中运行单元测试我们可以看到在web端得到了客户端发送过来的数据,而且客户端也得到了服务器端发送过来的数据
分享到:
相关推荐
post方式提交数据 android 老鸟勿入
Android端使用get post 方法提交数据到服务器demo 传智播客张泽华Android视频54-57代码 包括web和Android端 仅供学习
java、android http使用post进行提交数据,把数据提交给服务器,服务器通过获取可以存储到数据库
Android Studio实现POST请求,每个步骤都有注释,比较适合萌新了解如果通过POST方式发起网络请求。
从学长那得来的,不知道是哪位大神的,感觉很适合新手,让我受益匪浅,侵删哦,(#^.^#)
以4中方式提交数据到服务器,分别是get、post、httpclient的get和httpclient的post方式提交数据到服务器
Android GetPost数据提交实例,发送post必须设置 conn.setDoInput(true);conn.setDoOutput(true);这两行代码,从用户界面提交过来的数据上传到服务器接收,类似于WEB网页提交表单的操作,不过Android有自己独特的...
向服务器提交数据有两种方式,post和get。两者的区别主要有三点,安全性、长度限制、数据结构。其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。两种都是较为重要的数据提交方式。现简单...
其中一个Button是使用get方式提交数据,一个是使用post提交数据。 <EditText android:layout_width=match_parent android:layout_height=wrap_content android:id=@+id/et_main_name android:hint=请输入...
简单方便的android 端http get 和post 请求 测试端口数据用
POST方式代码,模似POST方式登录QQ,适合初学者和想学习POST方式提交数据的人员。
老罗Android开发视频教程汇总课程目录:【】android之http协议编程第1集:http协议的介绍【】android之http协议编程第2集:http协议GET方式获取图片【】android之http协议编程第3集:使用Post方式进行提交数据【】...
开发项目需要,自己事先写的demo,已备项目中去用,自己通过和iphone后台程序进行测试过。
Android简单的注册登录页面ecplise开发,用Post方式提交数据
接到这样一个需求,需要在 WebView 的所有网络请求中,在请求的url中,加上一个sign=xxxx 的标志位,同时添加手机本地的数据比如 sessionToken=sd54f5sd4ffsdf45454564 、deviceId=863970025919887 文章链接:...
小编刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个坑,总结下最常用的就通过HttpURLConnection来POST提交JSON数据与GET请求JSON数据。此外就是下载图片,下载图片分为显示进度与不显示进度两种。...
Android的JSON示例 一、运行环境: 1.服务器端为ASP+Access2003+IIS 2.移动端为Android2.1(大家可...实现通过Post或Get方法向服务器传送数据 服务端: Webroot文件夹 ASP+Access2003 实现对Android端Request的Response
一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Android 设备上搭建一个小型 Web 服务器,并且实现常规的下载图片、下载文件、提交表单等功能...
该数据Jar包实现了 Android 与 jsp 页面之间的数据交互 它封装了http post请求与提交的数据 并且 简化了它 并且内含 使用源码