登录页面,表单提交,参数不显示
2017-05-04 16:20
302 查看
一开始的form:
点击登录按钮,显示:
修改form属性,添加method=”post”,点击登录按钮,链接不带参数,避免信息外泄
总结:form修改为post方式
post,get比较:
转自:http://www.cnblogs.com/baiduligang/p/4247555.html
一、问题的提出
注意到表单中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中有一个文本框,,那么url会变成insert.jsp?addresswuhan.
<form action="home/check"> <!--下面是用户名输入框--> ${msg} <div class="input-group"> <span class="input-group-addon" id="basic-addon1">@</span> <input id="userName" name="email" type="text" class="form-control" placeholder="用户名" aria-describedby="basic-addon1" value="${email}"> </div> <br> <!--下面是密码输入框--> <div class="input-group"> <span class="input-group-addon" id="basic-addon1">@</span> <input id="passWord" name="psw" type="password" class="form-control" placeholder="密码" aria-describedby="basic-addon1" value="${psw}"> </div> <br> <!--下面是登陆按钮--> <button type="submit" class="btn btn-default" id="login">登 录</button> </form>
点击登录按钮,显示:
修改form属性,添加method=”post”,点击登录按钮,链接不带参数,避免信息外泄
总结:form修改为post方式
post,get比较:
转自:http://www.cnblogs.com/baiduligang/p/4247555.html
一、问题的提出
<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中有一个文本框,,那么url会变成insert.jsp?addresswuhan.
相关文章推荐
- 关于JSP页面表单提交中文乱码问题和URL中文参数乱码问题
- puppeteer 抓取网页内容。在另外一个页面显示,并自动提交表单
- springmvc + freemarker 解决表单提交、页面显示乱码 的问题
- JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连
- magento中模块开发实例,前后台开发,前台表单提交,页面配置显示
- 模拟页面(表单)提交登录
- ASP.NET MVC 3.0:基于Ajax的表单提交,A页面认证失败后页面被强转至登录页面,待登录成功将如何回到A页面?
- JSP中乱码问题解决(一、JSP页面显示乱码,二、表单提交中文时出现乱码,三、数据库连接出现乱码,四、数据库的显示乱码 )
- UTF8编码页面提交参数登录到GB2312编码处理
- 表单(form)的提交实现参数页面间的传递
- 使用struts2提交jsp页面表单时参数中汉字乱码的问题
- 不刷新页面提交表单,并显示进度条
- 在JSP表单提交中怎样在Servlet中处理文件上传并且获取JSP页面传过来的一些参数
- htm表单提交给服务器&服务器接收浏览器的参数进行显示
- JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连
- 关于form表单提交,如何跳转到一个带参数的页面
- nodejs提交form表单并将提交信息显示在页面上
- (转)ASP.NET MVC 3.0:基于Ajax的表单提交,A页面认证失败后页面被强转至登录页面,待登录成功将如何回到A页面?
- Freemarker获取上个页面表单提交的参数
- 表单提交到下一个页面后,再点击IE上的后退,如何能让表单内容再次显示出来?(以及当前页禁止IE返回按钮js)