上一讲中我们介绍了客户端在向服务器发出请求的过程,这个过程我们是不可见的,但是我们可以用系统提供的 Telnet 服务来做相关的实验查看客户端向服务器请求的过程。这一讲我们就来学习一下这方面的知识,还要学习一下Tomcat服务器是如何搭建的,这对于以后学习服务端上面的开发也是非常有帮助的。
1. 启用Telnet服务
win xp: cmd --> services.msc --> 自动启动Telnet服务
win7 : 控制面板 --> 程序和功能 --> 打开或关闭Windows功能 --> 安装Telnet服务。
cmd --> services.msc --> 自动启动Telnet服务
2. 使用Telnet访问远程主机
在cmd上敲入以下telnet命令访问远程主机
命令格式:telnet + 远程登陆主机名字 + 端口号(Telnet的也需要端口号,FTP的端口号21,Telnet的默认端口号是25)
例如: telnet www.sohu.com 80 (默认浏览器端口号是80)
------------------------------------------
编辑一个想远程主机发出GET请求的命令,命令如下所示:
GET /index.html HTTP/1.1
Host:www.soho.com
[注意]Host表示远程主机名字,然后敲两次回车,第一次回车表示写完确认,第二次回车发出请求。最好命令在本地编写完后粘贴上去,因为在登陆到Telnet上之后是没有回显信息的,而且在登陆Telnet的过程中如果一定时间内没有发出请求,Telnet会自动关闭的。所以建议在操作Telnet的时候用在本地编辑好后贴上去。
这里我们响应HEAD方法的请求,我们只需要得到响应的头部信息,GET请求会把内容一起发回来。不便查看
HEAD /index.html HTTP/1.1
Host:www.soho.com发出请求之后得到响应消息如下图所示:
由于服务器HTTP协议版本是1.1的所有缺省情况下具备持续连接特性,所以我们可以在一次连接的情况下多次进行请求,在一段时间客户端没有继续向服务器发出请求的情况下会自动与服务器断开连接。这边读者可以直接去尝试一下,如果在一次请求之后马上断开连接的情况,则会发现服务器的版本是1.0。
Connection:Keep-Alive (指定持续连接,在HTTP1.1协议版本中缺省情况下是使用持续连接。所以这条语句加或不加都是可以的)
我们可以尝试请求sohu服务器中可能不存在的资源文件,查看它返回的状态码,如下是请求命令和返回状态码的截图,通过Telnet服务工具可以很清楚的看到客户端与服务器请求响应之间的差别。
HEAD /server.html HTTP/1.1
Host:www.sohu.com
可以发现它返回的状态码是302,表示这个文件在服务器中未被找到或者被移走,建议重新发出请求
3. 接下去我们学习一下Tomcat服务器的搭建
我们需要用到的服务器是Tomcat(它也是用Java语言编写的),这个是目前市场占用最多的开源服务器。www.apache.org 这里面集成了很多优秀的开源项目,我们也是从这个网址中下载Tomcat。我们下载的是 Tomcat 6.0 版本,直接下载zip版本解压缩就可以使用,这样也不需要安装。
我们来看一下解压缩完后主要的目录结构:
bin: 这个目录里面放的是一些服务器的可执行文件,其中startup.bat是启动文件
lib: 表示Tomcat用到的一些库
webapps: 将来我们自己开发的应用部署到服务器上,就是放在放置在这个目录里面就可以被用户访问到了
work: 这个服务器在编译的时候产生的一些临时文件1) 安装完成之后,要想启动Tomcat,我们需要配置两个环境变量(重要):
CATALINA_HOME: 把Tomcat安装目录配置在环境变量中,Tomcat以前也叫做CATALINA
Java_HOME: 还要配置 Java Home环境变量,是JDK的安装目录(bin目录的上一层目录)我的电脑中安装的环境变量配置如下,可以参考:
2) 浏览器中输入 http://localhost:8080/ 如果显示 Apache Tomcat 页面则说明配置Tomcat成功。
3) 下面我们就来使用Telnet服务登录到我们自己搭建的Tomcat服务器上,查看请求与相应的过程
登录命令: telnet localhost 8080
HEAD / HTTP/1.1 (如果"/"后面不加资源内容就是表示请求该服务器根目录下的主页面)
Host:localhostConnection:Keep-Alive (指定持续连接,在HTTP1.1协议版本中缺省情况下是使用持续连接。所以这条语句加或不加都是可以的)
Connection:close (指定非持续连接,也就是说HTTP1.0的请求,即只能发出一条请求,后面需要请求必须重新进行连接)
上图:HEAD方法请求Tomcat根目录主页面,由于是HTTP1.1版本所以缺省情况下是持续连接的。
上图:使用HEAD方法请求Tomcat根目录主页面,即便是HTTP1.1版本,在指定连接connection为close的状态之后,一次请求之后断开连接。
上图:使用GET方法请求Tomcat服务器的hello.html,由于是HTTP1.1版本,所有有持续连接的特性,同时使用GET方法服务器的相应内容,内容是HTML代码,这里我们将其用浏览器打开观察如下所示。可以观察到服务器中是没有hello.html资源的,所以返回状态码是404的错误。
下一讲内容,我们来学习一下服务器的相关知识。下个礼拜服务器内容学习完简单内容之后,会返回到Android部分的学习,主要是客户端与服务之间的数据交互, 如Json数据解析等, 之后就开始继续学习Android中的框架部分的学习,当然期间会穿插一些Android新特性,包括的主流app的UI风格的实现的。