JAVA网站制作之JSP制止Form反复提交三种计划
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net并驾齐驱的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">
2仍是javascript,将提交按钮大概image置为disable
<html:formaction="myAction.do"method="post"
>
<html:imagestyleId="submitInput"src="http://www.webjx.com/htmldata/2006-03-09/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乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net有没有机会赶上java。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java 编程语言的风格十分接近C、C++语言。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
页:
[1]