Struts1防止表单重复提交
package org.zln.struts.action; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Created by sherry on 000020/5/20 20:37.
*/
public class RegUserUI extends Action { @Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
/*注意,请求页面一定要通过这个Action跳转过去*/
this.saveToken(request);
return mapping.findForward("SUCCESS");
}
}
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>注册用户</title>
</head>
<body> <hr/>
<html:link action="/local?language=zh">中文</html:link><br/>
<html:link action="/local?language=en">英文</html:link><br/>
<hr/>
<html:errors property="doubleSubmit" header="" footer="" prefix="" suffix=""/>
<!-- 注意:只有使用html:form生成的表单,才会从session中获取Token -->
<html:form action="/regUser" method="post">
<table>
<caption>注册</caption>
<tr>
<td>用户名</td>
<td><html:text property="regUser.username"/><html:errors property="username" header="" footer="" prefix="" suffix=""/> </td>
</tr>
<tr>
<td>密码</td>
<td>
<%-- value="" 是为了不回显密码--%>
<html:password property="regUser.password" value=""/> <html:errors property="password" header="" footer="" prefix="" suffix=""/>
</td>
</tr>
<tr>
<td>密码确认</td>
<td>
<html:password property="password2" value=""/><html:errors property="password2" header="" footer="" prefix="" suffix=""/>
</td>
</tr>
<tr>
<td>身高</td>
<td>
<html:text property="regUser.height"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<html:submit titleKey="info.submit"><bean:message bundle="message" key="info.submit"/></html:submit>
<html:checkbox property="autoLogin">两周内自动登录?</html:checkbox>
<html:cancel>取消</html:cancel>
</td>
</tr>
</table>
</html:form>
<hr/> </body>
</html>
package org.zln.struts.action; import org.apache.struts.action.*;
import org.zln.struts.form.RegUserForm; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Created by sherry on 000020/5/20 20:37.
*/
public class RegUser extends Action { @Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionMessages errors = new ActionMessages();
/*进行所有操作之前,先判断表单是否重复提交*/
if (!isTokenValid(request,true)){//假如Token无效 true表示校验完后将Token从session中清除
errors.add("doubleSubmit",new ActionMessage("表单重复提交",false));
this.saveErrors(request,errors);
return mapping.getInputForward();
}
RegUserForm regUserForm = (RegUserForm) form;
System.out.println("username:"+regUserForm.getRegUser().getUsername()+"\nautoLogin:"+regUserForm.isAutoLogin());
request.setAttribute("username",regUserForm.getRegUser().getUsername());
/*业务逻辑校验*/
if (!"zln".equals(regUserForm.getRegUser().getUsername().trim())){//假设数据库中获取到的用户名是 zln
errors.add("username",new ActionMessage("用户不存在",false));
this.saveErrors(request,errors);//request.setAttribute(Globals.ERROR_KEY, errors);
//return mapping.findForward("FAILURE");
return mapping.getInputForward();
}
return mapping.findForward("SUCCESS");
}
} /*
因为在打开表单页面之前,会先往session中存放一个Token,
提交请求的时候,会将隐藏域中的Token作为参数一起提交
所谓有效的Token,就是session中的Token与表单提交时候的Token值相同,就被视为是一次请求。并且判断完后会将session中的Token清除
加入用户通过后退再次提交,此时session中的Token已经消失了,所以Token判断就会被视为无效
*/
Struts1防止表单重复提交的更多相关文章
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- java防止表单重复提交
用session防止表单重复提交 思路:在服务器端生成一个唯一的随机标识串Token,同时在当前用户的Session域中保存这个Token.然后将Token发送到客户端的Form表单中,在Form表单 ...
- java web学习总结(十三) -------------------使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- 使用Struts 2防止表单重复提交
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- js阻止form表单重复提交
防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单 ...
- PHP简单利用token防止表单重复提交
<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...
- token防止表单重复提交
出现表单重复提交的三种情况: 一.服务器响应缓慢,用户多次点击提交按钮. 二.提交成功后刷新页面. 三.提交成功后返回表单页面再次点击提交. package com.jalja.token; impo ...
- JavaWeb防止表单重复提交(转载)
转载自:http://blog.csdn.net/ye1992/article/details/42873219 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用 ...
随机推荐
- CSS实现表单
效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- 揭开js之constructor属性的神秘面纱
揭开 constructor 在 Javascript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中.这个 ...
- python3 练习题100例 (二十九)猴子吃桃问题
题目内容: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第n天(<1<n< ...
- python-集合类型
集合具有唯一性(集合中的元素各不相同),无序性,确定性(集合中的元素是不可改变的,不能是列表,字典以及集合本身) 1.add(self, *args, **kwargs),union(self, *a ...
- 640. Solve the Equation
class Solution { public: string solveEquation(string equation) { int idx = equation.find('='); , v1 ...
- 007---logging日志模块
logging模块 用途:服务器运行日志.运维日志... import logging from logging.handlers import RotatingFileHandler, TimedR ...
- POJ-2421-Constructing Roads(最小生成树 普利姆)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26694 Accepted: 11720 Description The ...
- 简单整理React的Context API
之前做项目时经常会遇到某个组件需要传递方法或者数据到其内部的某个子组件,中间跨越了甚至三四层组件,必须层层传递,一不小心哪层组件忘记传递下去了就不行.然而我们的项目其实并没有那么复杂,所以也没有使用r ...
- “Code First Migrations ”工具【转】
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...
- Hbase表格设计
Rowkey设计 Region: 基于RowKey的分区,可理解成MySQL的水平切分. 每个Region Server就是Hadoop集群中一台机器上的一个进程. 比如我们的有1-300号的RowK ...