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. javascript--select标签的添加删除功能的使用

    在网页开发中,常常遇见这种问题,给定两个框,A和B,和几个图片按钮,A中存在几个操作,点击图片按钮,填加至B中,或者从B中移除等,这种效果如何实现,本文加以总结. 几种效果图如下: 原始图:      ...

  2. PHP接收http请求头信息

    1.PHP 自带函数 getallheaders() 目前 getallheaders() 只能用于 apache 中.如果想在 nginx 中也能使用,可以使用自定义函数. foreach (get ...

  3. 07 json与os模块(进阶)

    json和os模块 阶段一 .数据交换 1.json的基本介绍 JSON全名是JavaScript Object Notation(即:JavaScript对象标记)它是JavaScript的子集. ...

  4. MetInfo最新网站漏洞如何修复以及网站安全防护

    metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的 ...

  5. 实验吧编程题python

    网址:http://ctf5.shiyanbar.com/jia 之后第一步就是刷新一下网页,发现给的公式会变,(废话,要不直接算数不就行了...)但是格式不会变. 所以那就暴力一点好了,我们看一下这 ...

  6. phpMyAdmin出现错误 Access denied for user 'root'@'localhost' (using password: NO)

    今天安装wmpp,之后启动后点击phpMyAdmin 报拒绝连接错误:#1045 - Access denied for user 'root'@'localhost' (using password ...

  7. 11 TCP实现QQ聊天

    1.客户端参考代码 #coding=utf-8 from socket import * # 创建socket tcpClientSocket = socket(AF_INET, SOCK_STREA ...

  8. 如何搭建SBT编译Scala开发的Android工程

    作者:戚明峰 最近接触了shadowsocks的Android客户端项目源码(https://github.com/shadowsocks/shadowsocks-android),刚好这个项目是使用 ...

  9. [转]Visual Studio 项目类型 GUID 清单

    转自:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs Complete li ...

  10. 一步一步构建手机WebApp开发——页面布局篇

    继上一篇:一步一步构建手机WebApp开发——环境搭建篇过后,我相信很多朋友都想看看实战案例,这一次的教程是页面布局篇,先上图: 如上图所示,此篇教程便是教初学者如何快速布局这样的页面.废话少说,直接 ...