一、问题的提出
   <form action="getPostServlet/getPost.do?param4=param4" method="get">
     <input type="hidden" name="param1" value="param1">
     <input type="hidden" name="param2" value="param2">
    <input type="text" name="param3" value="param3" readonly>
    <input type="submit" name="button1" value="submit">
</form>

注意到表单中action:getPostServlet/getPost.do?param4=param4
这个action带有一个参数param4,
如果用get方法提交,后台无法接收到这个参数;
如果用post方法提交,后台就可以接收到这个参数。
问题原因的简单解释:
用get方法提交的url显示如下:
http://localhost/mywebapp/getPostServlet/getPost.do?pram1=param1&pram2=param2&pram3=param3&button1=submit也就是说method为get时action自己后边带的参数列表会被忽视,,后台无法接收到这个参数,只能得到表单中的参数;
用post方法提交的url显示如下:
http://localhost/mywebapp/getPostServlet/getPost.do?param4=param4
也就是说post方式提交表单,参数分为两部分:一部分是action中的参数放在地址栏;另一部分是表单中的参数放在请求的头中;所以所有的数据后台全部能获得。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。Request从几个集合取数据是有顺序的,从前到后的顺序依次是 QueryString,Form,最后是ServerVariables。Request对象按照这样的顺序依次搜索这几个集合中的变量,如果有符合的就中止,后面的就不管了。

一、get和post定义

form元素的method属性用来指定发送form的http方法;

使用get时,form数据集被附加到form元素的action属性所指定的URL后面;

使用post时,form数据集被包装在请求的body中并被发送。

使用get提交方式,生成URL:user.do?loginId=abc

get仅仅是拼接一个URL,然后直接向服务区请求数据,需要提交给服务器的数据集包含在URL中。

使用post提交方式,生成URL:user.do

post会把form的数据集,即loginId=abc这个键值对包装在请求的body中,发给服务器,然后向服务器请求数据。

二、get和Post的区别

1、安全性

如果用get提交一个验证用户名和密码的form,一般认为是不安全的,因为用户名和密码将出现在URL上,进而出现在浏览器的历史记录中。

显然,在对安全性有要求的情况下,应该使用post。

2、编码

get只能向服务器发送ASCII字符,而post则可以发送整个ISO 10646中的字符。

get和post对应的enctype属性有区别。enctype有两个值,默认值为application/x-www-form-urlencoded(在发送前编码所有字符)

另一个是multipart/form-data(用于文件上传)只能用于post。

3、提交数据的长度。

IE将请求的URL长度限制为2083个字符,从而限制了get提交的数据长度,如果URL超出了这个限制,提交form时IE不会有任何反映。

4、缓存

由于一个get得到的结果直接对应到一个URL,所以get的结果页面有可能被浏览器缓存,而post一般不能。

5、引用和SEO 
可以用一个URI引用一个get的结果页面,而post的结果则不能,所以必然不能被搜索引擎搜到。

最本质的区别:

1、Get是用来从服务器上获得数据,而post是用来向服务器上传递数据

如果采用Post方法,浏览器将会按照下面两步来发送数据。

首先浏览器将action属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。

在服务器端,一旦Post样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码,用户特定的服务器会明确指定应用程序应该如何接受这些参数。

采用Get方法:

浏览器会直接与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据,然后直接在一个传输步骤中发送所有的表单数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

三、正确的使用get和post 
当且仅当form是幂等的时候,使用get。 
幂等:多次相同的请求产生的副作用,和一次请求的副作用相同。

如果提交请求纯粹只是从服务器端获取数据而不是进行其他操作,并且多次提交不会有明显的副作用,应该使用get。 
比如:搜索引擎的查询(http://www.google.com/search?q=abc)和分页(user.do?page=1)

如果提交这个请求会产生其他操作和影响,就应该使用post。 
比如:修改服务器上数据库中的数据;发送一封邮件;删除一个文件等

另一个要考虑因素是安全性。

若符合下列任一情况,则用post方法: 
a.请求的结果有持续性的副作用,例如:数据库内添加新的数据行。 
b.若使用get方法,则表单上收集的数据可能让URL过长。 
c.要传送的数据不是采用ASCII编码。

若符合下列任一情况,则用get方法: 
a.请求是为了查找资源,html表单数据仅用来搜索。 
b.请求结果无持续性的副作用。 
c.收集的数据及html表单内的输入字段名称的总长不超过1024个字符。

四、浏览器差异 
IE6:URL长度限制为2083个字符;post之后,刷新页面不会自动重新post数据,会出现警告。 
IE7和IE6相同。 
Firefox:刷新页面不会自动重新post数据会出现警告。

post和get容易忽视的一点差别:

就是当method为get时,action属性中URL后面的参数是忽视的。

例如:

action=insert.jsp?name=tobby method=get,当我们提交之后真正的url中是没有name=tobby的,他会根据表单中的内容重新组装成一个url的,假如form中有一个文本框,<input type="text" name="address" value="wuhan">,那么url会变成insert.jsp?addresswuhan.

form表单中method的get和post区别相关推荐

  1. Form表单中method=post/get'的区别

    Form提供了两种数据传输的方式--get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一 ...

  2. 关于继承BaseServlet后为什么form表单中必须加上method=“post”

     关于继承BaseServlet后为什么form表单中必须加上method="post"            学习Servlet中一直有个困惑,在提交form表单时我action ...

  3. form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)

    上一篇:Java 0基础入门 (Html标签的使用) 表单在网页中主要负责数据采集功能. 一.表单实际应用场景 百度搜索 5173注册 如上两张图,图中的黑色线条是我画上去的,如果按照黑线,在Excl ...

  4. form表单中的onSubmit

    今天看一个代码,突然发现了一个form表单中的onSubmit,估计是好久都没有写前端表单提交了,突然忘了,赶紧到网上查了查. 原文地址:https://www.cnblogs.com/ahudyan ...

  5. form表单中的action属性

    form表单中的action属性的值是表单提交给的url,如果我们没有设置action属性,那么默认的表单还是提交给当前页面 <form action = "register" ...

  6. 在form表单中添加一个隐藏的reset按钮,

    //在form表单中添加一个隐藏的reset按钮, <input type="reset" style="display:none;" /> //然 ...

  7. php表单数据类型,form表单中enctype属性的三种类型

    1.form表单中enctype属性的三种类型 form表单中enctype属性可以用来控制对表单数据的发送前的如何进行编码,enctype有三种,分别为: multipart/form-data不对 ...

  8. html表单提交按钮代码,JavaScript在form表单中使用button按钮实现submit提交方法

    submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了,submit和button,二者都以按钮的形式展现,看起来都是按钮,所不同的是type属性和处发响应的事件上. ...

  9. form表单中的enctype属性

    form表单中的enctype属性 enctype就是encodetype就是编码类型的意思.   multipart/form-data是指表单数据中由多部分构成,既有文本数据,又有文件等二进制数据 ...

最新文章

  1. c# html文本编辑器,C#实现简单文本编辑器
  2. 阿里某员工论坛炫耀:感谢公司让毕业不到两年的我年入百万
  3. 跟踪了下CSDN博客之星的竞选数据,我就看看不评论,你怎么看?
  4. 如何处理日志文件丢失
  5. nginx编译安装,nginx静态资源访问和负载均衡的使用!
  6. Mac上使用nginx访问本地文件夹报403的问题
  7. oracle子查询子查询,Oracle 单行子查询和多行子查询
  8. [Golang]计算一个文件的MD5值
  9. java抓rtp包_Wireshark抓取RTP包,还原语音
  10. ACL2021最佳论文出炉,来自字节跳动
  11. 阿里云视频点播一站式解决解决方案怎么样?
  12. 301跳转有什么用?为什么要做301跳转?
  13. 使用win32API获取打印机是否处于脱机状态
  14. 服务器卡logo显示2f,战争机器4卡LOGO界面解决办法
  15. 支付宝密钥及文件生成方式
  16. 为什么建议大家使用 Linux 开发?爽!!!
  17. 电视购物中心小型呼叫中心系统二次开发
  18. 博途SCL边沿触发(上升沿/下降沿)有输入无输出
  19. VMware中Mac虚拟机开机出现“电脑因出现问题而重新启动,请按一下按键,或等几秒钟以继续启动。”
  20. OUC软件开发实验3

热门文章

  1. Sublime Es6教程1-环境搭建
  2. CodeForces 625A Guest From the Past
  3. [物理学与PDEs]第2章习题参考解答
  4. 127 - Accordian Patience
  5. PHP文件头部(header)解释
  6. Python 进阶_生成器 生成器表达式
  7. 限流算法之漏桶算法、令牌桶算法
  8. CDQZ集训DAY8 日记
  9. 《中国人工智能学会通讯》——12.38 知识库与 HTML 表格的融合
  10. 简析ThinkSNS+ 计算字符显示长度的方法!【社交系统研发日记】