struts2禁止表单重复提交
2013-11-24 12:06
477 查看
token拦截器的使用
a.在JSP表单中添加<s:token/>标签.
b.在struts.xml的action配置中,添加token拦截器的引用
<interceptor-ref name="token"/>
token拦截器负责将表单中的ID与session中ID对比
c.在struts.xml的action配置中,添加action中<result=invalid.token>视图.jsp</result>.
如果拦截器发现重复提交,将自动调用此视图响应.
tokenSession拦截器的使用
a,b两步与token的使用相同.不需要c步骤
tokenSession如果发现重复提交,将采用第一次提交的响应界面
原理:如果是第一次进入表单会生成一个唯一ID session存着这个ID Hidden也存着id当提交给服务器
服务器检查Session中的ID和hidden一致则提交成功同时会把session中的id清掉
配置struts.xml文件,声明动作
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="avoidPackage" extends="struts-default">
<action name="avoid" class="struts2.action.AvoidAction">
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="invalid.token">/error.jsp</result>
<result name="input">/input.jsp</result>
<result name="success">/output.jsp</result>
</action>
</package>
</struts>
此时,需要在动作的声明中,为动作添加token拦截器,因为token拦截器不在defaultStack拦截器栈中,注意,需要将拦截器放在拦截器栈的第一位,这是因为判断表单是否被重复提交的逻辑应该在表单处理前。
例子:
创建动作类
public class AvoidAction extends ActionSupport {
private static final long serialVersionUID = 2676453800249807631L;
private String username;
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute()
{
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
这个动作逻辑处理为挂起4秒钟,让我们有机会多次点击提交按钮,测试效果。
创建页面:
input.jsp
<s:form action="avoid">
<s:token>
</s:token>
<s:textfield name="username" label="Enter your name"></s:textfield>
<s:textfield name="birthday" label="Enter your birthday"></s:textfield>
<s:submit value="submit">
</s:submit>
</s:form>
测试:
在提交时按F5 或一直点击submit看到控制台出警告了
a.在JSP表单中添加<s:token/>标签.
b.在struts.xml的action配置中,添加token拦截器的引用
<interceptor-ref name="token"/>
token拦截器负责将表单中的ID与session中ID对比
c.在struts.xml的action配置中,添加action中<result=invalid.token>视图.jsp</result>.
如果拦截器发现重复提交,将自动调用此视图响应.
tokenSession拦截器的使用
a,b两步与token的使用相同.不需要c步骤
tokenSession如果发现重复提交,将采用第一次提交的响应界面
原理:如果是第一次进入表单会生成一个唯一ID session存着这个ID Hidden也存着id当提交给服务器
服务器检查Session中的ID和hidden一致则提交成功同时会把session中的id清掉
配置struts.xml文件,声明动作
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="avoidPackage" extends="struts-default">
<action name="avoid" class="struts2.action.AvoidAction">
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="invalid.token">/error.jsp</result>
<result name="input">/input.jsp</result>
<result name="success">/output.jsp</result>
</action>
</package>
</struts>
此时,需要在动作的声明中,为动作添加token拦截器,因为token拦截器不在defaultStack拦截器栈中,注意,需要将拦截器放在拦截器栈的第一位,这是因为判断表单是否被重复提交的逻辑应该在表单处理前。
例子:
创建动作类
public class AvoidAction extends ActionSupport {
private static final long serialVersionUID = 2676453800249807631L;
private String username;
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute()
{
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
这个动作逻辑处理为挂起4秒钟,让我们有机会多次点击提交按钮,测试效果。
创建页面:
input.jsp
<s:form action="avoid">
<s:token>
</s:token>
<s:textfield name="username" label="Enter your name"></s:textfield>
<s:textfield name="birthday" label="Enter your birthday"></s:textfield>
<s:submit value="submit">
</s:submit>
</s:form>
测试:
在提交时按F5 或一直点击submit看到控制台出警告了
相关文章推荐
- struts2禁止表单重复提交 demo
- Struts2 防止表单重复提交
- 不用struts2的token机制,手动防止表单数据重复提交
- 禁止表单重复提交
- Struts2解决表单重复提交
- struts2基础(一) struts2标签<s:token />防止表单重复提交
- Struts2中防止表单重复提交,global-results定义全局结果处理
- Struts2防止表单重复提交
- Struts2表单验证、模型驱动、防重复提交、数据回显笔记整理 文章标题
- Struts2防止表单重复提交
- struts2如何防止表单重复提交
- Struts2第十三篇【防止表单重复提交】
- Struts2防止表单重复提交
- struts2 结果类型的作用 type & 防止表单重复提交
- Struts2(十五):解决表单的重复提交
- struts2中采用拦截器防止表单重复提交
- Struts2中重复提交表单分析
- struts2防止表单重复提交以及刷新浏览器重复访问后台的解决方案
- struts2中t使用token防止重复提交表单
- struts2中token防止重复提交表单