之前一直在用form表单提交,但一直没有了解它的原理,今天就看了看,希望能帮到大家理解首先先来看一下平时的form表单结构。action后面跟的是路径url,methord是用哪种方式来传递,一般都是get和post两种方式,form表单里面有一些input标签。http是来如何提交表单的呢?我们来看一下
1、表单提交时表单内容会被浏览器封装为HTTP请求报,里面包含了所有表单元素的name属性值和value属性的值,形式为name=value。
2、该HTTP请求报被webserver获取后会被解析并封装成一个Request对象,Request对象里有一个Parameters集合专门用来存放所有的表单元素键值对,这里的parameters即Firefox的HttpRequester插件Parameters。
3、每个表单元素名值对被封装成一个Parameter,而Parameter其实就是一个Map,所以你的Server里就可以用request.getParameter(name)获取其value了
如果用get方式提交表单,会在地址栏显示 param=value 这种形式,比如说提交路径是http://localhost/MyDemo/testAction.do?id=test&status=insert get是默认的提交方式
然后通过Firefox的HttpRequester插件(参数可以写入Content to Send、Headers、Parameters传递给后端),发起一个http url请求。
那http url请求又是怎么回事呢?
通常情况下,HTTP协议的工作原理很好理解,用户通过客户端向服务端发起一个请求,创建一个TCP连接,指定端口号,默认是80,然后连接到服务器工作。在那个端口监听浏览器请求。一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回一个响应状态,比如"HTTP/1.0 , 404 ,OK",同时会返回特定的数据内容,如请求的资源,错误代码,其它状态信息等等。
当浏览器向服务器发送一个请求到Web服务器,它发送一个数据块,或请求信息,HTTP请求信息包括3部分:1、请求方法URI协议/版本;2、请求头(Request Header);3、请求正文;
下面是一个HTTP请求的示例:
GET/test.html HTTP/1.1 (这是请求方法URI协议/版本)
Accept:image/test.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate (到这里是请求头(Request Header))
username=linuxidc&password=linuxidc(请求正文)
请求正文和请求头要有空行。这个空行必须存在,说明结束请求头传输,开始传输正文请求。请求正文中一般包含很多信息,例如用户提交的用户名和密码之类的登陆信息:userlogin=linuxidc¤tpwd=linuxidc
补充:根据HTTP标准,HTTP请求可以使用多种不同的请求方法。例如:HTTP1.1允许支持七种请求方法(也叫“动作”):GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。日常开发中,GET和POST是最常用的方法,主要在相关的Web开发中。
那form表单通过get把数据提交到web上,服务器通过解析数据进行存储,然后怎么响应呢?
和请求报文类似,HTTP响应主要也是3个部分构成:(1)协议状态版本代码描述;(2)响应头(Response Header);(3)响应正文
HTTP/1.1 200 OK
Server:Apache Tomcat/7.0.1
Date:Mon,2Match2017 13:23:42 GMT
Content-Length:102
下面是响应正文
最后是.submit()方法,走的是请求http,get,或者post, 一般get是从服务器上获取数据,post是向服务器传送数据。get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP。post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
推荐个网址 http://www.cnblogs.com/Jxwz/p/4509618.html 大家可以看看
谢谢观赏!