|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。js|反复|反复提交
1javascript,设置一个变量,只同意提交一次。
<scriptlanguage="javascript">
varcheckSubmitFlg=false;
functioncheckSubmit(){
if(checkSubmitFlg==true){
returnfalse;
}
checkSubmitFlg=true;
returntrue;
}
document.ondblclick=functiondocondblclick(){
window.event.returnValue=false;
}
document.onclick=functiondoconclick(){
if(checkSubmitFlg){
window.event.returnValue=false;
}
}
</script>
<html:formaction="myAction.do"method="post"onsubmit="returncheckSubmit();">
2仍是javascript,将提交按钮大概image置为disable
<html:formaction="myAction.do"method="post"
onsubmit="getElById(submitInput).disabled=true;returntrue;">
<html:imagestyleId="submitInput"src=http://www.163design.net/j/e/"images/ok_b.gif"border="0"/>
</html:form>
3使用struts的同步令牌机制
使用同步令牌(Token)机制来办理Web使用中反复提交的成绩,Struts也给出了一个参考完成。
基础道理:
服务器端在处置抵达的哀求之前,会将哀求中包括的令牌值与保留在以后用户会话中的令牌值举行对照,看是不是婚配。在处置完该哀求后,且在回复发送给客户端之前,将会发生一个新的令牌,该令牌除传给客户端之外,也会将用户会话中保留的旧的令牌举行交换。如许假如用户回退到方才的提交页面并再次提交的话,客户端传过去的令牌就和服务器真个令牌纷歧致,从而无效地避免了反复提交的产生。
if(isTokenValid(request,true)){
//yourcodehere
returnmapping.findForward("success");
}else{
saveToken(request);
returnmapping.findForward("submitagain");
}
Struts依据用户会话ID和以后体系工夫来天生一个独一(关于每一个会话)令牌的,详细完成能够参考TokenProcessor类中的generateToken()办法。
1.//考证事件把持令牌,<html:form>会主动依据session中标识天生一个隐含input代表令牌,避免两次提交
2.在action中:
//<inputtype="hidden"name="org.apache.struts.taglib.html.TOKEN"
//value="6aa35341f25184fd996c4c918255c3ae">
if(!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
newActionError("error.transaction.token"));
resetToken(request);//删除session中的令牌
3.action有如许的一个办法天生令牌
protectedStringgenerateToken(HttpServletRequestrequest){
HttpSessionsession=request.getSession();
try{
byteid[]=session.getId().getBytes();
bytenow[]=
newLong(System.currentTimeMillis()).toString().getBytes();
MessageDigestmd=MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return(toHex(md.digest()));
}catch(IllegalStateExceptione){
return(null);
}catch(NoSuchAlgorithmExceptione){
return(null);
}
}
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net, |
|