您的位置:首页 > 编程语言 > Java开发

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

2009-02-01 17:50 826 查看
以前还没有接触过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>中加入 onsubmit="return checkPost()" 即可
这样就可以防止在用户看到服务器端响应之前,进行重复提交。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: