zoukankan      html  css  js  c++  java
  • Androidclient採用Http 协议Post方式请求与服务端进行数据交互

    本演示样例以Servlet为例,演示Android与Servlet的通信

    众所周知,Android与server通信通常採用HTTP通信方式和Socket通信方式。而HTTP通信方式又分get和post两种方式。至于Socket通信会在以后的博文中介绍。

     

    HTTP协议简单介绍:

    HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网经常使用的协议之中的一个,HTTP协议是建立在TCP协议之上的一种协议。

     

    HTTP连接最显著的特点是client发送的每次请求都须要server回送响应。在请求结束后,会主动释放连接。

    从建立连接到关闭连接的过程称为“一次连接”。  在HTTP 1.0中。client的每次请求都要求建立一次单独的连接。在处理完本次请求后,就自己主动释放连接。  在HTTP 1.1中则能够在一次连接中处理多个请求,而且多个请求能够重叠进行,不须要等待一个请求结束后再发送下一个请求。

     

    因为HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”、“无状态”,要保持client程序的在线状态,须要不断地向server发起连接请求。通常的做法是即使不须要获得不论什么数据,client也保持每隔一段固定的时间向server发送一次“保持连接”的请求,server在收到该请求后对client进行回复。表明知道client“在线”。

    若server长时间无法收到client的请求,则觉得client“下线”,若client长时间无法收到server的回复,则觉得网络已经断开。

     

    基于HTTP1.0协议的client在每次向server发出请求后,server就会向client返回响应消息,在确认client已经收到响应消息后,服务端就会关闭网络连接。

    在这个传输数据过程中,并不保存不论什么历史信息和状态信息,因此,HTTP协议也被觉得是无状态的协议。

     
    HTTP1.1和HTTP1.0相比較而言,最大的差别就是添加了持久连接支持。

    当client使用HTTP1.1协议连接到server后,server就将关闭client连接的主动权交还给client;也就是说,仅仅要不调用Socket类的close方法关闭网络连接。就能够继续向server发送HTTP请求。

     

    HTTP连接使用的是“请求—响应”的方式(2次握手)。不仅在请求时须要先建立连接,并且须要client向server发出请求后,server端才干回复数据。

    而Socket连接在两方建立起连接后就能够直接进行数据的传输

     

     
    HTTP协议的特点:

    支持B/S及C/S模式;

    简单高速:客户向server请求服务时,仅仅需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。

    灵活:HTTP 同意传输随意类型的数据对象。正在传输的类型由Content-Type 加以标记。

    无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着假设兴许处理须要前面的信息。则它必须重传。这样可能导致每次连接传送的数据量增大。

     

    HTTP协议请求方法:

    请求行中包含了请求方法,解释例如以下:

    GET 请求获取Request-URI 所标识的资源;

    POST 在Request-URI 所标识的资源后附加新的数据;

    HEAD 请求获取由Request-URI 所标识的资源的响应消息报头

    PUT 请求server存储一个资源,并用Request-URI 作为其标识

    DELETE 请求server删除Request-URI 所标识的资源;

    TRACE 请求server回送收到的请求信息。主要用于測试或诊断

    CONNECT 保留将来使用

    OPTIONS 请求查询server的性能,或者查询与资源相关的选项和需求

     

    Get与Post请求差别:

    Post请求能够向server传送数据。并且数据放在HTML HEADER内一起传送到服务端URL地址,数据对用户不可见。而get是把參数数据队列加到提交的URL中,值和表单内各个字段一一相应, 比如(http://www.baidu.com/s?

    w=%C4&inputT=2710)

    get 传送的数据量较小,不能大于2KB。

    post传送的数据量较大,一般被默觉得不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

    get安全性很低。post安全性较高。

    项目结构图:

     

      get方式:

             get机制用的是在URL地址里面通过?号间隔。然后以name=value的形式给client传递參数。所以首先要在Androidproject下的AndroidGetTest.java中onCreate方法定义好其URL地址以及要传递的參数。然后通过URL打开一个HttpURLConnection链接,此链接能够获得InputStream字节流对象。也是往服务端输出和从服务端返回数据的重要过程,而若服务端response.getInputStream.write()往andorid返回信息时候,就能够通过InputStreamReader作转换,将返回来的数据用BufferReader显示出来。

    详细代码例如以下:

             Servlet端接收数据并返回通知:

     

      Android端发送消息并接收Servlet返回的消息:

    post方式:

             post传输方式不在URL里传递,也正好攻克了get传输量小、easy篡改及不安全等一系列不足。主要是通

    过对HttpURLConnection的设置。让其支持post传输方式。然后在通过相关属性传递參数(若须要传递中文字符,则能够通过URLEncoder编码,而在获取端採用URLDecoder解码就可以)

     


  • 相关阅读:
    我对闭包的几点初步认识
    python 字符串的split()函数详解
    使用两个不同类型的数据进行加法计算时,使用异常处理语句捕获由于数据类型错误而出现的异常,发生生成错误。是否继续并运行上次的成功生成?
    自定义一个抽象类,用来计算圆的面积
    接口里不能包括字段,构造函数,析构函数,静态成员或常量等,否则会导致错误
    抽象类与抽象方法的使用
    如何设置修改WPS批注上的用户信息名称
    在双击控件进入到程序代码编辑界面后,没写东西不影响运行,但删除后报错
    电影管理系统修改后,为啥不能识别数据库
    添加现有项到当前项目的几点注意事项
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7100420.html
Copyright © 2011-2022 走看看