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

struts2 采用Session Token(Token 令牌)避免表单重负提交

2012-02-29 19:07 375 查看
表单的重复提交一直都是一个比较困扰人的问题,下面是struts2采用Token令牌的方式的来避免重复提交。

有表单的页面,也就是将要提交表单的那个页面,需用struts2自己的标签,要使用struts2的标签,当然是要在jsp文件的开头加上:

<%@ taglib prefix="s" uri="/struts-tags" %>然后就可以用他的标签了、
现在以一个最基本的表单来示范:

<s:form action="token" theme="simple">
username:<s:textfield name="username"></s:textfield><br/>
password:<s:password name="password"></s:password><br/>
<s:token></s:token>
<s:submit></s:submit>
</s:form>


注意上面的表单,为一个亮点就是多加了<s:token></s:token>这个标签。这就是struts2封装好了的,查看他的源代码可以看到:
<form id="token" name="token" action="/strut2_302_token/token.action;jsessionid=946434B84A81E5B277DC0DE907204923" method="post">

username:<input type="text" name="username" value="" id="token_username"/>
<br/>

password:<input type="password" name="password" id="token_password"/><br/>

<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="33T962IU08J88WEQWZ9WMSNXWYCQU11P" />

<input type="submit" id="token_0" value="Submit"/>

</form>

呵呵,有多了个隐藏域、这应该就是重点了。我们不妨假设,struts2这个<s:token></s:token>的原理,应该就和那个value随机数有关。

接下来,为了测试,新建两个jsp页面。
刚刚提交时,转到tokenSuccess.jsp。

假设表单重复提交,则转到:tokenFail.jsp。

然后,最重要的一步:(当然还是我们struts2的核心配置文件struts.xml文件了)

<package name="login" extends="struts-default" namespace="/">

<action name="token" class="com.guang.struts2.token">
<result name="success">/tokenSuccess.jsp</result>
<result name="invalid.token">/tokenFail.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

</action>
</package>

注意上面的代码,较平时多出了两句:
<interceptor-ref name="token"></interceptor-ref>

        <interceptor-ref name="defaultStack"></interceptor-ref>

这个是struts2的拦截器、

java文件没有什么特殊的,随便的生成get,set方法。再在execute方法中return SUCCESS; 即可了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息