Struts1防止表单重复提交
2015-06-13 18:32
513 查看
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表单校验
- Spring.net 在aps.net Web的配置复习
- spring中事务管理的几种方式
- 在eclipse中导入spring源码
- Struts1之编码问题
- Struts1之bean标签
- 在Spring MVC中,事务可以加在Controller层
- java 关于分页的实现
- Maven学习(二十六)-Maven新建项目的JDK版本类型问题
- Struts1之logic标签
- Java IO之PushbackInputStream类
- Struts1之html标签
- Maven学习(二十五)- Eclipse中不使用内嵌Maven
- java-String中的 intern()<转>
- MyBatis学习(十一)-MyBatis与Spring整合(一)
- Java设计模式——Proxy(代理)模式
- 通过Java反射在运行时修改TimerTask的执行周期并且立即生效
- ”好程序员训练营“——用eclipse调试程序
- 重踏学习Java路上_Day02(java 基础上)
- Spring [IoC]6 详解@Autowired、@Qualifier和@Required