01.HTTP协议介绍

转载请标明出处:http://blog.csdn.net/u012637501
一、Android客户端与服务器交互
1.HTTP协议简介
    HTTP协议即超文本传输协议(Hypertext Transfer Protocol),是建立在TCP协议之上的一种应用,它是基于请求/响应的通信协议,每次连接只做一次请求/响应,服务器响应客户端请求后,就不会记录客户端的信息,更不会维护客户端的状态,因此HTTP又称为无状态的通信协议
    由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种"短连接""无状态",要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次"保持连接"的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端"在线"。若服务器长时间无法收到客户端的请求,则认为客户端"下线",若客户端长时间无法收到服务器的回复,则认为网络已经断开
2.HTTP协议特点
(1)简单快速
    客户端向服务器请求服务时,只需传送请求方法路径请求方法常用的有GET、HEAD、POST等,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,因而通信速度很快。
(2)灵活
    HTTP允许传输任何类型的数据对象。正在传输的类型由Content-Type加以标记。
(3)无连接
    无连接的含义是限制每次连接处理一个请求。服务器处理完客户的请求并收到客户的应答后,即断开连接。采用这种方式,可以节省传输时间
(4)无状态
    HTTP协议是无状态协议。无状态是指协议对于事物处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另外,在服务器不需要先前信息时,它的应答就较快。
3.GET和POST的区别
(1)传递数据形式
◆GET请求方法:是将需要传递的数据按照"键=值"对的形式,添加到URL的后面,并且两者使用"?"连接,而多个变量之间使用“&”连接;
◆POST请求方法:是将传递的数据放在请求的数据体不会在URL中显示
(2)安全性
◆GET请求方法:GET是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL存放至日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前;
◆POST请求方法:Post的所有操作对用户来说都是不可见,因此安全性较高。
(3)传输性能
◆GET传输的数据量小,这主要是因为受URL长度受限制;
◆POST可以传输大量的数据,所以在上传文件只能使用POST。
4.Apache HttpClient API
(1)HttpClient:该类是HTTP客户端的接口,该接口封装执行Http请求所需要的各种对象,这些对象可以处理cookie、授权、连接管理以及其他一些特性。HttpClient的线程安全依赖于具体的客户端的实现和配置。
(2)HttpGet:该类采用GET方式发送HTTP请求,通常将请求的URL作为参数传给该类的构造方法;
(3)HttpPost:该类采用POST方式发送HTTP请求,通常将请求的URL作为参数传给该类的构造方法;
(4)HttpResponse:该接口封装了HTTP的响应信息,通过调用相应方法可以获取HTTP响应信息,例如获取响应状态、响应内容等。
(5)HttpEntity:该类封装了HTTP信息,通过该类可以获取HTTP请求响应的内容、长度、类型、编码方式等信息,HttpEntity对象可以通过Http消息发送和接收,既可以存在于请求消息中,也可以存在于响应消息中。

二、使用HttpClient访问Http资源步骤
1.创建HttpGet或HttpPost对象,将需请求的URL通过构造方法传入HttpGet或HttpPost对象;
2.使用DefaultHttpClient类execute()方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象;
3.通过HttpResponse接口getEntity()方法返回响应信息(HttpEntity对像,其内为接收的响应信息),并进行相应处理。注意:如果使用Http提交HTTP POST请求,还需要使用HttpPost类的setEntity()方法设置请求参数。
→HttpClient执行过程(GET请求)
技术分享
技术分享
①创建HttpClient对象,表示客户端对象;
②根据URL创建HttpGet对象,其内容包含一个Get请求;
③调用客户端对象的execute(HttpGet对象),将HttpGet对象包含的Get请求传送给服务器,
    返回一个HttpResponse对象(包含服务器的响应信息)
④调用HttpResponse对象的getEntity()方法,其包含的响应信息封装到实体HttpEntity对象中;
⑤调用HttpEntity实体的getContent()方法,获得响应信息的输入流,最后读取输入流中的内容并以字符串的形式返回。
技术分享

→HttpClient执行过程(POST请求)
(1)准备Post请求实体
    HttpClient httpClient=new DefaultClient();                                    //①创建客户端对象
    String url="http://baidu.com";                                                    //②指定请求路径URL
    NameValuePair pair1=new BasicNameValuePair("键1",值1);      //③创建参数列表(传递的数据)
    NameValuePair pair2=new BasicNameValuePair("键2",值2)            //每个参数以键值对的形式保存在NameValuePair中
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(pair1);
    params.add(pair2);
     HttpEntity httpEntity=new UrlEncodedFormEntity(params,"gbk");//④根据参数创建封装发送信息的HttpEntity对象
     HttpPost httpPost=new HttpPost(url); //⑤将HttpEntity对象赋值给HttpPost对象(Post请求信息实体)
     httpPost.setEntity(httpEntity);
(2)调用客户端对象execute()方法发送Post请求,并同时获得服务器响应信息(HttpResponse)
    HttpReponse httpResponse=httpClient.execute(httpPost);
(3)从HttpResponse对象中获取封装了响应信息的HttpEntity对象,并获取对应的输入流
    HttpEntity httpEntity=httpResponse.getEntity();    //获取响应信息实体
    InputStream is=httpEntity.getContent();                //获取实体中响应信息对应的输入流
技术分享

三、Tomcat服务器
1.Tomcat服务器简介
    Tomcat是一个免费的、开源的web应用服务器,它是一个轻量级应用服务器。在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试Java web程序的首选。
2.安装和使用中需注意
(1)设置Tomcat的端口号:默认情况下,该端口为8080,如果需要设置,最好选一个1024以上的端口号。1024以内的端口大部分都被系统所用,以避免端口冲突;
(2)设置Tomcat管理员账户和密码,管理应用时需要登录;
(3)启动Tomcat:直接双击Tomcat安装路径下的bin路径的tomcat6.exe即可。重复启动Tomcat,控制台将会报错并直接退出,因为第二次启动时,端口已经被占用,必须关闭之前的Tomcat,才能启动。
3.在Tomcat中部署Java Web应用
(1)Java Web部署
    Java Web部署方式有多种,使用Tomcat安装目录下的conf文件夹下的Server.xml文件进行部署。在该文件的倒数第四行即</host>标签之上,添加如下代码。
技术分享
    ◆path虚拟路径,启动Tomcat后,可通过http://localhost:8080/login/来访问该项目中的相关页面;               
    ◆docBase项目根目录所在路径,是本机上的一个绝对路径,即Java Web应用所存放的位置,需要定位到WebRoot目录下;  
    ◆reloadable:设置为"true",表示修改Servlet文件后,不需要重启服务器就可以实现页面的同步更新
(2)服务器处理和响应流程
    当客户端发送http://localhost:8080/login/LoginServlet请求时,服务器是如何处理和响应的呢? 
    第一步:根据Tomcat的Server.xml文件,查看login虚拟路径所对应的物理路径,即docBase所对应的值;   
    第二步:找到该物理路径下的web.xml文件,找到包含<url-pattern> /LoginServlet</url- pattern>的<Servlet-mapping>;    
    第三步:根据<servlet-name>LoginServlet</servlet-name>找到对应的<servlet-class>的值,获取类名iet.jxufe.cn.server.LoginServlet ;    
    第四步:根据反射机制,创建iet.jxufe.cn.server.LoginServlet类对象,并执行相应的方法,在方法处理中,会返回相应的处理结果。最后将结果返回给客户端。
(3)注意事项
◆Tomcat已启动,并且Java Web程序已部署到Tomcat服务器中;     
◆客户端访问服务端的URL要正确,在此为http://10.0.2.2:8080/login/LoginServlet而不是Java Web中的http://localhost:8080/login/LoginServlet。因为模拟机通过127.0.0.1访问的是模拟器本身。在模拟器上访问安装模拟器的电脑,需要使用android内置的IP:10.0.2.2。10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名,如果是网络服务器,可直接写相应的IP或网址;     
◆需要在清单文件中添加访问网络的权限;     
◆不能直接访问网络,需进行相应处理,建议采用消息传递机制;

四、Servlet中间件
1.Servlet简介
    Servlet(Server+let)是在服务器上运行的小程序,具有独立于平台和协议的特性,可以生成动态的web页面,用于处理及响应客户端的请求,担当客户请求(web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层
2.Servlet类
    Servlet实质上是个特殊的Java类,该类继承于Servley或其子类(如HttpServlet),Servlet用于处理和响应客户端的请求,Servlet提供了不同的方法用于响应客户端请求。通常客户端的请求只有GET和POST两种,Servlet为了响应这两种请求,只需重写doGet()和doPost()两个方法即可。
3.Servlet处理和响应客户端请求的过程
(1)客户端发送请求至服务器端;
(2)服务器将请求信息发送至Servlet;
(3)Servlet生成响应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
(4)服务器将响应结果以指定的形式返回给客户端。
4.MyEclipse中创建Servlet的配置
技术分享
注意:Mapping URL设置的值为访问该Servlet的URL路径。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。