struts2学习(15)struts2防重复提交
一、重复提交的例子:
package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.cy.model.Student;
import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport{
private static final long serialVersionUID = 1L; private Student student; public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} public String add() throws Exception {
System.out.println("开始添加学生:"+student);
Thread.sleep(5000);
System.out.println(student.getName()+"添加完成");
return SUCCESS;
} }
struts.xml:
<struts>
<package name="manage" extends="struts-default">
<action name="student" class="com.cy.action.StudentAction" method="add">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
student.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="student" method="post" >
姓名:<input type="text" name="student.name"/><br/>
年龄:<input type="text" name="student.age"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
测试:


二、使用<s:token/>标签防重复提交

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="manage" extends="struts-default">
<action name="student" class="com.cy.action.StudentAction" method="add">
<result name="success">/success.jsp</result>
<result name="invalid.token">/student.jsp</result> <interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package> </struts>
student.jsp修改为如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 重复提交的错误信息显示在这里 -->
<s:actionerror/> <form action="student" method="post" >
<!-- s:token的存在,让每次提交都有唯一的一个token令牌
到了struts.xml中的<interceptor-ref name="token">token拦截器,就会识别
比如说第一次提交的时候,肯定有一个标识记录在session里面,假如用户手贱又点了一次的话,
form中token的值还是一样的,<interceptor-ref name="token">发现又来了这个玩意,肯定是重复提交。
会返回一个<result name="invalid.token">,将错误信息返回到student.jsp里面。
-->
<s:token></s:token>
姓名:<input type="text" name="student.name"/><br/>
年龄:<input type="text" name="student.age"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
测试:
填写姓名和年龄,点击两次提交,发现界面提示信息:

而后台正常执行,只添加一条:

三、使用tokenSession 拦截器防重复提交 -- 这种方式挺好的。

com.cy.action.StudentAction.java:
package com.cy.action; import com.cy.model.Student;
import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport{
private static final long serialVersionUID = 1L; private Student student; public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} public String add() throws Exception {
System.out.println("开始添加学生:"+student);
Thread.sleep(5000);
System.out.println(student.getName()+"添加完成");
return SUCCESS;
} }
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="manage" extends="struts-default">
<action name="student" class="com.cy.action.StudentAction" method="add">
<result name="success">/success.jsp</result> <!-- <result name="invalid.token">/student.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref> --> <interceptor-ref name="tokenSession"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package> </struts>
student.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="student" method="post" >
<s:token></s:token>
姓名:<input type="text" name="student.name"/><br/>
年龄:<input type="text" name="student.age"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
测试:

前台显示添加成功:

查看后台:

struts2学习(15)struts2防重复提交的更多相关文章
- (九)Struts2 防重复提交
所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:重复提交示例演示 struts.xml <?xml version ...
- JavaWeb -- Struts2,对比, 简单表单提交,校验,防重复提交, 文件上传
Struts2核心流程图 1. Struts2 和 Struts1 对比 struts1:基于Servlet(ActionServlet),actionForm众多(类的爆炸),action单例(数据 ...
- struts2 防止表单的重复提交
防止表单重复提交(拦截器) 1.回顾之前的解决办法: 2.Struts2中的解决办法: 2.1.使用重定向 <result type="redirect">/succe ...
- struts2之防止表单重复提交
struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- struts2的防止表单重复提交
防止表单重复提交其实就是struts2的一个拦截器的使用: struts.xml配置文件: <?xml version="1.0" encoding="UTF-8& ...
- Struts2中解决表单重复提交
3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下: >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...
- 【Struts2】防止表单重复提交
一.概述 二.Struts2中解决方案 三.实现步骤 一.概述 regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) ...
- AJAX防重复提交的办法总结
最近的维护公司的一个代理商平台的时候,客服人员一直反映说的统计信息的时候有重复数据,平台一直都很正常,这个功能是最近新进的一个实习生同事写的功能,然后就排查问题人所在,发现新的这个模块的AJAX提交数 ...
- resubmit 渐进式防重复提交框架简介
resubmit resubmit 是一款为 java 设计的渐进式防止重复提交框架. 推荐阅读: 面试官:你们的项目中是怎么做防止重复提交的? resubmit 渐进式防重复提交框架简介 创作目的 ...
随机推荐
- node 项目材料 集合
resfull 与 token node生成 跨平台 验证码图片 搭建简单的服务器
- three.js入门系列之视角和辅助线
假设你已经创建好了three.js的开发环境(我是写在vue项目中的),那么接下来,从头开始演示是如何用three.js来构建3D图形的.(笔记本写的代码,屏幕小,所以为了能够整屏看到完整代码,就将字 ...
- 42.zip
最近看linux的解压缩,无意间了解到了一个和压缩率相关的小故事——42.zip 一般我们使用压缩工具的时候,都会用到无损压缩技术,对于无损压缩,算法非常重要,不同的算法实现 的压缩率和速度有很大差别 ...
- Javascript MV framework 对比
Javascript 最近的framework笔记多,大致可分以下3类.单向绑定简单直接.ajax从service拿数据传递给viewtemplate进行绑定.当然这个过程也可以在服务器端来做,.ne ...
- Python IDLE 的使用与调试
Python IDLE 是Python 安装包自带的集成开发环境.IDLE集成了Python 解释器.编辑器与调试器.适用于初学者了解Python 语法知识.1.使用 Python IDLE 编辑Py ...
- Aria2 - OS X 下载百度云资源神器
官网介绍: (Aria2 is a light weight multi-protocol & multi-source command-line download utility. It s ...
- Underscore template
/********************************************************************* * Underscore template * 说明: * ...
- 【剑指offer】和为s的两个数字
原创博文,转载请注明出处! # 题目 # 思路 首先定义两个指针,第一个指针p指向数组的第一个数字,第二个指针q指向数组的最后一个数字.如果p+q=s,则找到要找的数字:如果p+q<s,则p向后 ...
- 复选框checkbox样式修改
该方法只兼容IE9及以上 将checkbox和label关联起来, 将checkbox隐藏掉,通过点击label来点击checkbox,label的样式即可自定义. 通过checkbox:checke ...
- BZOJ2095 POI2010 Bridges 【二分+混合图欧拉回路】
BZOJ2095 POI2010 Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛 ...