关于获取表单数据

今天有个同事做二次开发的时候遇到一些表单数据的小问题,可是这些小问题却也难倒我了。因为之前一直在用struts处理表单数据,好久没直接处理过了。所以完全忘记了,温故知新一下。

获取JSP表单数据,通常的方法是request.getParameter。此方法对于POST提交方式来说,用来获得客户端传送给服务器请求中的消息体信息,对于GET来说是获取URL后面的参数值。无论哪一种方式,参数都是一样的,只是一个显示在消息体中,另外一个在URL上。该参数是由name指定的。

之前一直有个误区,以为request.getParameter只能获取URL上面的参数,正正忽略了还可以拿消息体里面的东西。因为一直以来都用FormBean的关系吧。这些都不大理会了。

[size=medium][b]如果request.getParameter获取不了值的话,原因会有三个。[/b][/size]
1.获取的request.getParameter的参数值不存在于表单中。即没有一个标签里面的name是跟获取的参数所对应的。注意是name而不是id。
2.form表单设置了enctype="multipart/form-data"属性。这个需要上传文件的时候会用到。
3.获取的参数标签里面存在disabled="disabled"

对于第二种情况,想要获取参数值比较麻烦。因为表单数据都封装成meta二进制格式传输了。好像可以通过common-fileupload组件来解决。具体没测试,搜下应该有的。或者有更多其他办法解决。

[size=medium][b]中文问题:[/b][/size]
表单提交的时候,数据流默认为ISO-8859-1。所以获取的值的时候,中文的话可能会出现乱码情况,这时候只用通过转码就可以了。

   String str=request.getParameter("userName");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);


另外说一下 request.getAttribute

这个方法通常服务器端使用setAttribute,用来封装bean放回给视图层进行进一步的操作。此时视图层就使用getAttribute进行获取数据了。另外setAttribute方式不一定是request,参照scope吧。可选访问更广阔。

[size=medium] [b]关于如何选择GET还是POST[/b][/size]

URL的长度

URL是有长度限制的,一般不超过255bytes..实际不同的浏览器会有不同长度准则。
所以表单提交的时候选择method时还必须考虑数据量的问题。大数据和不想数据显示在URL上的话,选择POST比较好。


浏览器缓存机制

GET方法的时候需要注意URL缓存机制,因为浏览器为提供性能,如果通过GET方法投递的两次URL都相同的话,第二次会启动缓存机制。所以常常需要通过传送一个虚拟的值来区分,为了避免第二次获取了一次缓存值。

而对于POST,因为消息体浏览器并不知道它内容,不能判断是否两次投递的信息是否一样。所以不会启动缓存机制。

安全性

对于POST和GET两种请求方式,POST方法也相对的安全那么一点。

总结一点,在普通情况下,能用POST就用POST吧。但是GET方法又可以在很多的情况下给与我们带来很多的便利,也是不可缺少的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值