《老罗Android》学习之 HTTP编程(一)

1. HTTP协议的定义
   WWW是以Internet作为传输媒介的一个应用系统, WWW网上基本的传输单位是Web网页。WWW的工作是基于客户机/服务器计算模型,由Web浏览器和Web服务器构成,即B/S结构,两者之间采用超文本传输协议HTTP进行通信。
   HTTP协议是基于TCP/IP协议之上的协议, 是Web浏览器和Web服务器之间的应用层的协议,是通用的、无状态的面向对象的协议。
  如果要实现网络互联我们要思考两个需要解决的技术问题:
第一:浏览器和服务器是通过什么来连接的。
第二:这种连接方式是怎么实现的。

通过Internet去发送到服务器当中,而Internet内部可以通过三种方式来实现发送信息和数据:
第一种: HTTP协议,也是在工作中最常用的,是建立在TCP/IP基础上实现的。
第二种: FTP协议

第三种:TCP/IP协议,它也是最底层的协议,其它的方式必须是要通过它,但是要想实现这种协议必须要实现socket编程,这种方法是用来上传一些比较大的文件,视频,进行断点续传的操作。

2 .OSI 7层模型
  如图:

1) 物理层:包括物理连网媒介,如电缆连线连接器。
  物理层的协议产生并检测电压以便发送和接收携带数据的信号。
2)数据链路层:如交换机,数据链路层协议包括:SDLC、HDLC、PPP、STP、帧中继等。
  它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。
3)网络层:其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。如路由器。
4) 传输层:传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。TCP/IP协议。
5) 会话层:负责在网络中的两节点之间建立、维持和终止通信。
6)表示层:表示层管理数据的解密与加密,如系统口令的处理。
7)应用层:主要负责对软件提供接口以使程序能使用网络服务。HTTP协议。
3. HTTP协议实例剖析

 客户端连接服务器实现内部的原理如下:
  
流程分析:
第一步:在浏览器客户端中得到用户输入的内容。
第二步:浏览器得到这个网址之后,内部会将这个域名发送到DNS上,进行域名解析。得到它的IP之后就会链接到指定的服务器上,假如服务器的地址是:221.104.13.32:80, 从浏览器到服务器端口它使用到最底层的TCP/IP协议
第三步:实现TCP/IP协议用Socket来完成,使用了Socket的套接字。
第四步:服务器端的80端口监听客户端的链接,这样客户端到服务器就链接上了。
HTTP请求体的内容介绍
    
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>测试HTTP协议体的内容</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--	<link rel="stylesheet" type="text/css" href="styles.css">	-->
	</head>
	<body>
		<form name="form1"  method="post" action="<%=path %>/LonginServlet">
			用户名:
			<input type="text" name="username" value="admin" /><br />
			密  码:
			<input type="password" name="password" value="123" /><br />
			<input type="submit" name="submit" value="提交表单" />
		</form>
	</body>
</html>
<form name="form1"  method="post" action="<%=path %>/LonginServlet"> 表单中方法为 post, 所以提交后会跳转到 "<%=path %>/LonginServlet",转换一下是: http://192.168.1.105:8080/MyHTTP/LonginServlet;    并调用 LonginServlet.java 的 doPost()方法.
HTTP响应的内容介绍
    
可以用 HTTPWatch 工具查一下,这个操作的过程, HTTPWatch 是IE 的一个插件,安装后,用IE浏览器打开,查看---> 浏览栏 就可以看到这个HTTPWatch .
  
   在这里面可以测试到响应时间,结果,头部信息等信息.
在这里面有个 Cookies: JSESSIONIDSent5444476F20784E44DECCC2900186336D
 当用户登录时,点击登录按钮后,可能等的时间比较长,就多点了几次,这样就多次登录了. 服务器怎么判断是哪个用户呢? 所有在HTTP的协议体当中要把Cookies的JSESSIONID返回给客户端,客户端就知道是哪个用户登录了.
HTTP返回请求数据的三种方式
服务器接收到这些内容之后,并按照这些请求的路径找到对应的页面,进一步找到对应的网页内容,返回给客户端。
服务器返回客户端的内容有三种方式:
1、以HTML代码内容返回。
2、以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。
3、以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
4. HTTP的 Post和Get方法
1)  实现POST方法
String url = http://10.168.7.72/Test/test.do;
    HttpPost request = new HttpPost(url);
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValue("name","taohaibing"));
    params.add(new BasicNameValue("sex","male"));
    request.setEntity(new UrlEncodeFormEntity(params,HTTP.UTF_8));
    HttpResponse response = new DefaultHttpClient().execute(request);
   if(response.getStatusLine().getStatusCode()==200)
    {
           String result = EntityUtils..toString(response.getEntity());
}
2) 实现GET方法
String url =  http://10.168.7.72/Test/test.do;
  HttpGet request = new HttpGet(url);
  HttpResponse response = new DefaultHttpClient().execute(request);
  if(response.getStatusLine().getStatusCode()==200)
  {
     String result = EntityUtil.toString(response.getEntity());
  }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值