JAVA教程之JSP制止Form反复提交的三种计划
首先第一点: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, Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 是一种使用者不需花费很多时间学习的语言 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]
2