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防止表单重复提交的更多相关文章

  1. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  2. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  3. java防止表单重复提交

    用session防止表单重复提交 思路:在服务器端生成一个唯一的随机标识串Token,同时在当前用户的Session域中保存这个Token.然后将Token发送到客户端的Form表单中,在Form表单 ...

  4. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  5. 使用Struts 2防止表单重复提交

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  6. js阻止form表单重复提交

    防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单 ...

  7. PHP简单利用token防止表单重复提交

    <?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...

  8. token防止表单重复提交

    出现表单重复提交的三种情况: 一.服务器响应缓慢,用户多次点击提交按钮. 二.提交成功后刷新页面. 三.提交成功后返回表单页面再次点击提交. package com.jalja.token; impo ...

  9. JavaWeb防止表单重复提交(转载)

    转载自:http://blog.csdn.net/ye1992/article/details/42873219 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用 ...

随机推荐

  1. JQuery实现聊天对话框

    效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  2. HTML5读取input[type=file]中的图片

    转载 https://blog.csdn.net/fd214333890/article/details/71250488

  3. [异常笔记]poi读取Excel异常

    Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The sup ...

  4. centos7中vsftp的搭建

    开启vsftpd:service vsftpd start关闭vsftp:service vsftpd stop 安装vsftpd: yum -y install vsftpd 建立vsftpd帐号: ...

  5. MAthJax入门教程(五分钟上手)

    最近在研究,在页面中显示一些数学公式.搞得我很头疼. 据说MathJax会统一这已领域.所以去学了学.网上教程特别多.繁杂. 说的清楚的特别少. 我是这么跑通的,: 1.在官网下载代码地址为:http ...

  6. windows 下安装pyspider

    今天主要介绍一下在Windows下安装pyspider,pyspider是一款用python编写的网络爬虫框架,这个框架最好是在linux下运行,Windows下运行可能会出现兼容性问题,如果实在要在 ...

  7. No configuration found for this host:al

    想尝试多个agent来进行传输数据其中的一个配置文件如下: al.sources = r1al.sinks = k1al.channels = c1 al.sources.r1.type = avro ...

  8. python中使用空格还是使用 Tab键缩进的建议

    对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了.空格不会出现这个问题,因 ...

  9. Python学习手册之控制结构(一)

    在上一篇文章中,我们对 Python 进行了简单介绍和介绍了 Python 的基本语法,现在我们继续介绍 Python 控制结构. 查看上一篇文章请点击:https://www.cnblogs.com ...

  10. Black And White (DFS 训练题)

    G - Black And White ================================================================================ ...