使用GET方式向服务器端提交数据

* 原理:把要提交的数据组拼到Url后面

* http协议规定数据长度不超过4kb,IE浏览器超过1kb就会丢弃掉后面的数据

* 缺点:数据不安全

* 优点:代码书写简单


  1. 示例代码:
  2.  
  3. import java.io.InputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. import java.net.URLEncoder;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.text.TextUtils;
  10. import android.view.View;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13.  
  14. public class MainActivity extends Activity {
  15. private EditText etPwd;
  16. private EditText etQQ;
  17. private String pwd;
  18. private String qq;
  19.  
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. etPwd = (EditText) findViewById(R.id.et_pwd);
  25. etQQ = (EditText) findViewById(R.id.et_qq);
  26. }
  27.  
  28. /**
  29. * 1. 在子线程中进行网络通讯 2. 获取服务器返回的信息 3. 用Handler去展示服务器返回的信息
  30. */
  31. public void login(View v) {
  32. pwd = etPwd.getText().toString().trim();
  33. qq = etQQ.getText().toString().trim();
  34. if (TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)) {
  35. Toast.makeText(this, "亲,请输入QQ号码或者密码! :) ", 0).show();
  36. return;
  37. }
  38. // 开启子线程
  39. new Thread() {
  40. public void run() {
  41. requestNetWork();
  42. };
  43. }.start();
  44. }
  45.  
  46. /**
  47. * 网络通信
  48. */
  49. private void requestNetWork() {
  50. //Servlet
  51. try {
  52. String path = "http://192.168.25.70:8080/web/LoginServlet?" + "qq="
  53. + URLEncoder.encode(qq) + "&pwd=" + URLEncoder.encode(pwd, "utf-8");
  54. // 1. 创建Url
  55. URL url = new URL(path);
  56. // 2. 用Url打开连接
  57. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  58. // 3. 设置请求参
  59. conn.setRequestMethod("GET");
  60. conn.setConnectTimeout(3000);
  61. conn.setReadTimeout(3000);
  62. // 4. 获取响应状态码
  63. int code = conn.getResponseCode();
  64. if (code == 200) {
  65. // * 2xxx 请求成 3xxx重定向 4xxx资源错误 5xxx服务器错误
  66. // 5. 获取服务器返回的二进制输入流
  67. InputStream is = conn.getInputStream();
  68. // 把流转成字符串
  69. String text = StringUtils.parseStream2String(is);
  70. showToast(text);
  71. } else {
  72. showToast(code + "");
  73. }
  74. } catch (Exception e) {
  75. e.printStackTrace();
  76. showToast("服务器忙!");
  77. }
  78. }
  79.  
  80. /**
  81. * 在任意线程弹土司
  82. */
  83. public void showToast(final String text) {
  84. this.runOnUiThread(new Runnable() {
  85. @Override
  86. public void run() {
  87. Toast.makeText(MainActivity.this, text, 0).show();
  88. }
  89. });
  90. }
  91. }

使用POST方式向服务器端提交数据

* 原理:通过form表单提交数据

* 缺点:代码书写复杂

* 优点:数据安全

  1. 示例代码:
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import java.net.URLEncoder;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.text.TextUtils;
  9. import android.view.View;
  10. import android.widget.EditText;
  11. import android.widget.Toast;
  12.  
  13. public class MainActivity extends Activity {
  14.  
  15. private EditText etPwd;
  16. private EditText etQQ;
  17. private String pwd;
  18. private String qq;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. etPwd = (EditText) findViewById(R.id.et_pwd);
  24. etQQ = (EditText) findViewById(R.id.et_qq);
  25. }
  26. /**
  27. * 1. 在子线程中进行网络通讯
  28. * 2. 获取服务器返回的信息
  29. * 3. 用Handler去展示服务器返回的信息
  30. */
  31. public void login(View v) {
  32. pwd = etPwd.getText().toString().trim();
  33. qq = etQQ.getText().toString().trim();
  34. if (TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)) {
  35. Toast.makeText(this, "亲,请输入QQ号码或者密码! :) ", 0).show();
  36. return;
  37. }
  38. // 开启子线程
  39. new Thread() {
  40. public void run() {
  41. requestNetWork();
  42. };
  43. }.start();
  44. }
  45. /**
  46. * 网络通信
  47. */
  48.  
  49. private void requestNetWork() {
  50. //(1) 请求的Url不一样
  51. String path = "http://192.168.3.100:8080/web/LoginServlet";
  52. try {
  53. // 1. 创建Url
  54. URL url = new URL(path);
  55. // 2. 用Url打开连接
  56. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  57. // 3. 设置请求参数
  58. //(2)请求的方法不一样
  59. conn.setRequestMethod("POST");
  60. conn.setConnectTimeout(3000);
  61. conn.setReadTimeout(3000);
  62. //(3)多了两个请求头
  63. String data = "qq="+URLEncoder.encode(qq)+"&pwd="+URLEncoder.encode(pwd, "utf-8");
  64. conn.setRequestProperty("Content-Length", String.valueOf(data.length()));
  65. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  66. //(4)以二进制流的方式把数据提交给服务器
  67. //重要,声明要给服务器提交数据
  68. conn.setDoOutput(true);
  69. conn.getOutputStream().write(data.getBytes());
  70. // 4. 获取响应状态码
  71. int code = conn.getResponseCode();
  72. if (code == 200) {
  73. // * 2xxx 请求成 3xxx重定向 4xxx资源错误 5xxx服务器错误
  74. // 5. 获取服务器返回的二进制输入流
  75. InputStream is = conn.getInputStream();
  76. // 把流转成字符串
  77. String text = StringUtils.parseStream2String(is);
  78. showToast(text);
  79. } else {
  80. showToast(code + "");
  81. }
  82. } catch (Exception e) {
  83. e.printStackTrace();
  84. showToast("服务器忙!");
  85. }
  86. }
  87.  
  88. /*
  89. * 在任意线程弹土司
  90. */
  91. public void showToast(final String text) {
  92. this.runOnUiThread(new Runnable() {
  93. @Override
  94. public void run() {
  95. Toast.makeText(MainActivity.this, text, 0).show();
  96. }
  97. });
  98. }
  99. }

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.InputStream;
  3.  
  4. /**
  5. * 操作字符串
  6. */
  7. public class StringUtils {
  8.  
  9. /**
  10. * 从流中转成字符串
  11. * @param is
  12. * 输入流
  13. * @return null表示失败
  14. */
  15. public static String parseStream2Str(InputStream is) {
  16. //内存输出流
  17. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  18. int len = -1;
  19. byte[] buffer = new byte[1024*8];
  20. try {
  21. while((len = is.read(buffer)) != -1){
  22. baos.write(buffer, 0, len);
  23. }
  24. return new String(baos.toByteArray());
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. return null;
  28. }
  29. }
  30. }

Get和post的请求的区别:

URL不一样

提交的数据方式不一样

Post多了二个请求头: ContentLength 和 ContentType

Post用二进制输出提交数据

HttpURLConnection提交数据的更多相关文章

  1. Android提交数据到JavaWeb服务器实现登录

    之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...

  2. Android 采用post方式提交数据到服务器

    接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...

  3. Android 采用get方式提交数据到服务器

    首先搭建模拟web 服务器,新建动态web项目,servlet代码如下: package com.wuyudong.web; import java.io.IOException; import ja ...

  4. Android之使用HTTP协议的Get/Post方式向服务器提交数据

    1.Get方式 方法:通过拼接url在url后添加相应的数据,如:http://172.22.35.112:8080/videonews/GetInfoServlet?title=霍比特人&t ...

  5. 使用post方式提交数据

    post提交代码 public class MainActivity extends Activity { @Override protected void onCreate(Bundle saved ...

  6. Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例)

    1.POST请求:  数据是以流的方式写给服务器 优点:(1)比较安全 (2)长度不限制 缺点:编写代码比较麻烦   2.我们首先在电脑模拟下POST请求访问服务器的场景: 我们修改之前编写的logi ...

  7. Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)

    1.GET请求:    组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题)  (2)长度有限不能超过4K(h ...

  8. android 76 使用get post方式提交数据

    get方式: package com.itheima.getmethod; import java.io.InputStream; import java.net.HttpURLConnection; ...

  9. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

随机推荐

  1. SURF算法源代码OPENSURF分析

    SURF算法源代码分析 平台:win x64 + VS2015专业版 +opencv2.4.11 配置类似参考OPENSIFT,参考我的另一篇博客:https://www.cnblogs.com/Al ...

  2. 07_Hive的基本命令_Insert命令

    1.将查询结果插入Hive表语法结构: 1.1.基本模式插入: INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol ...

  3. python+selenium之——错误:selenium.common.exceptions.WebDriverException: Message: ‘geckodriver’ executable needs to be in PATH.

    此时,需要自己配置geckodriver 下载geckodriver,地址:https://github.com/mozilla/geckodriver/releases 下载后解压得到geckodr ...

  4. Spring入门篇——第5章 Spring AOP基本概念

    第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...

  5. CVE-2018-10933 LibSSH auth bypass

    漏洞原理 认证实现错误, 认证分为多个步骤,可以直接跳到成功的步骤       A vulnerability was found in libssh's server-side state mach ...

  6. 在当前目录下配置ansible

    配置ansible.cfg [defaults] inventory = myhost # 指定主机清单文件 host_key_checking = False 配置主机清单文件 [node] nod ...

  7. Vue event.stopPropagation()和event.preventDefault()的使用

    定义和用法 1. event.stopPropagation()方法 阻止事件冒泡到父元素,阻止任何父事件处理程序被执行,但是它的默认事件仍然会执行.当调用这个方法的时候,如果点击了一个链接(a标签) ...

  8. xftp传输文件失败

    迁移yii项目的时候,需要手动传输runtime文件夹.但是发现总是传输失败,后来得知是因为xftp必须是root用户才能传输成功. 或者把传输的目标文件夹权限修改为777. 修改目标文件夹的属主和属 ...

  9. nextUntil([exp|ele][,fil]) 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止。

    nextUntil([exp|ele][,fil]) 概述 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止. 如果提供的jQuery代表了一组DOM元素,.nextUntil()方法也能让 ...

  10. 小米oj 组长偏头痛(二分)

     组长偏头痛 序号:#28难度:非常难时间限制:1000ms内存限制:10M 描述 临近年底,组长突然患上了偏头痛的毛病,因为他最近从产品经理那里收到了好多需求,需要按排组员尽快完成. 现在用一个数组 ...