传智播客Java web学习,url编码及防止表单重复提交的两种方法

   以前还没有接触过url编码,开始还很难理解,毕竟张老师的教授经验丰富,通过例子的学习,理解起来也就容易多了。还有表单重复提交的两种解决方法,都挺重要的,实际项目中的应用很多,下面总结一下。
url编码
1.Http协议规定浏览器向Web服务器传递的参数信息中不能出现某些特殊字符,而必须对这些字符进行URL编码后再传送。web服务器端程序接到参数信息后,先从中分离出每个参数的名称和值部分,在对他们进行URL解码,最后将URL解码得到的字节数组按照某种字符集编码转换成Unicode字符串。
2。Url编码是对字符所对应的字符集编码进行URL编码,例如“中”所对应的gb2312编码是0xD6D0.然后对0xD6D0进行URL编码传送给服务器。
3,url解码过程:unicode码-->字符集编码字节数组-->对字节数组进行URL解码-->得到字节数组-->按字符集编码转换成unicode字符编码的字符串。
4,要解决URL解码造成的中文乱码问题要做到两点,
    一,在服务器程序中加入request.setCharacterEncoding("gb2312");
         用于设置请求消息实体的字符集编码。
    二,在<tomcat安装目录>/conf/server.xml 中<Connector .../>里加入
       useBodyEncodingForURI="true"/>
       这样,url地址后的参数的字符集编码也通过request.setCharacterEncoding("gb2312");语句设置为gb2312.

   由于某些原因 服务器响应缓慢的时候,用户提交FORM表单后没有立即看到服务器端的响应,他们很有可能再次单击一次或多次“提交”按钮,这就发生了同一份表单的重复提交,这在有些情况下是不允许的,例如金融交易。下面是两种解决方法。
利用Session防止表单重复提交,通过服务器端程序来阻止用户故意重复提交表单的行为,原理如下
(1)包含有form表单的页面由一个服务器程序动态产生,服务器程序为每次产生的页面中form表单都分配一个唯一的随机标识号,并在Form表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号
2.用户提交form表单时,服务器程序比较form表单隐藏字段中的标识号与存储在当前用户的Session域中标识号是否相同,如果相同则处理表单数据,然后清除当前Session域中存储的表单标识号。当用户重复提交原来得到的form表单时,当前用户的Session域中已不存在相应的表单标识号,服务器将忽略提交的表单请求。
3.浏览器只有重新向web服务器请求包含form表单的页面时,服务器程序才会产生另外一个随机标识号,并将这个标识号保存在Session域中和作为新返回的form表单的隐藏字段值。

    使用客户端的JavaScript程序,可以防止用户这种非故意的表单重复提交问题。代码如下:
<script language="javascript">
   var isCommitted=false;
   function checkPost()
   {
     if(!isCommitted)
     {
       isCommitted=true;
       return true;
     }
     else
     {
       alert("不能重复提交表单");
       return false;
     }
   }
</script>
在<form>中加入 οnsubmit="return checkPost()" 即可
这样就可以防止在用户看到服务器端响应之前,进行重复提交。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值