概述
from :http://blog.chinaunix.net/uid-21778123-id-1815443.html
http://www.cnblogs.com/yxnchinahlj/archive/2012/10/23/2735446.html
转的太多也不知道谁是原作了,补了一点东西上去。
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html from hyddd 17年1月25日看到,以<!--...-->方式做了新的增补。
以前知道HTTP有GET和POST两种请求方法,并且都见过,但印象里两者差不多,可以混着用。最近要进一步研究这个问题,才发现原来的想法不对。
不对有两点:1,GET和POST区别很大; 2,HTTP有不止这两种请求方法。
get和post这是http协议的两种方法,另外还有head, delete等
<!--
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
GET=获取,查询;PUT=更新
Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求
-->
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。
在servlet开发中,以doGet()和doPost()分别处理get和post方法。
另外还有一个doService(), 它是一个调度方法,当一个请求发生时,首先执行doService(),不管是get还是post。在HttpServlet这个基类中实现了一个角度,首先判断是请求时get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。你也可以直接过载doService()方法,这样你可以不管是get还是post。都会执行这个方法。
---------------------------------------------------------------
1.通过表单提交到的servlet,看form的method是get还是post
2.通过链接访问的servlet,doGet
3.直接在ie地址栏中键入的servlet地址,doGet
一般只要实现一个doGet,再另外一个doPost里面调用doGet(resq,resp),resq和resd是doPost的参数.
---------------------------------------------------------------
【GET和POST的区别】
(1)使用范围的区别:
使用GET时,form中的数据集(如input框的value)将被编码到URL中,作为URL的一部分。而使用POST时,form中的数据集则被编码到http协议的header中,构造成消息发送。在使用上,当且仅当请求是幂等(请求任意次都返回同样的结果)时使用GET,而当请求会改变服务器数据或状态时使用POST。当程序设计人员正确的使用GET,POST时,浏览器会给出更好的缓存配合,使响应速度更快。
<!--原理上,1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
(1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
(2).幂等的意味着对同一URL的多个请求应该返回同样的结果。2. 根据HTTP规范,POST表示可能修改变服务器上的资源的请求。-->
(2)在form提交阶段的差别:
form提交的第一步是创建数据集,并根据 ENCTYPE 指定的类型值对数据集进行编码。 ENCTYPE 有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值)。form提交的第二步是进行数据传输。对于GET方法,数据集使用application/x-www-form-urlencoded编码;而对于POST方法,数据集的 ENCTYPE 可以指定。
application/x-www-form-urlencoded对form数据集的编码规则:(1)如果是字母或数字,则直接使用其ascii码的十六进制。(2)对于非字母也非数字的字符,则不仅使用其ascii码的十六进制,还要在前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的urlencoded编码就是%5c。相应的解码函数(转载)如下:
|