zoukankan      html  css  js  c++  java
  • Struts中的 saveToken的方法

    saveToken防止2次提交的问题
    struts有自带的Token(令牌)的机制来解决重复提交(包括后退,刷新等).举例:

     假设:假设有一个新增用户的填写表单页面,填写完后点击"提交"按钮完成数据库录入功能,要求不能重复提交(指类似刷新页面的情况).此时,需要有两个action(第一个action用来生成hidden的token值.第二个action用来校验token值,通过判断来决定是不是重复提交,不是则提交操作,否则提示错误)和至少一个页面(保存token值和填写用户信息的录入页面)来完成校验是否重复提交.此处有两个页面来完成.

    具体逻辑如下:

    index.jsp--链接-->PrepareAddUserAction.java--转发并生成token-->addUser.jsp--提交-->
    AddUserAction.java--首先校验'是否重复提交',是提示错误信息,不是,执行数据库操作.

    部分相关代码(省略formbean的代码):
    ========index.jsp========
    <html><head><title>测试</title></head><body>
      <a href="<%=request.getContextPath()%>/PrepareAddUserAction.java">新增用户</a>
    </body></html>

    =========PrepareAddUserAction.java=========
    package com.tseyimwah.struts.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;

    public class PrepareAddUserAction extends Action {
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws HibernateException {
        //相关方法
        saveToken(request);  //在下一个页面addUser.jsp生成hidden类型的token值
    return mapping.findForward("addUser");//页面跳转
    }
    }

    ==========addUser.jsp=============
    此处代码没有什么要求,含有form的普通struts页面,代码省略,里面的"提交"按纽给AddUserAction.java,即<html:form  action="/AddUserAction.do" method="post">

    ============AddUserAction.java=====
    package com.tseyimwah.struts.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;

    public class AddUserAction extends Action {
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws HibernateException {
         
       //判断token值,如果是重复提交跳转到错误页面则提示出错信息,否则执行相关的数据库操作
       if (!isTokenValid(request)){
          request.setAttribute(GlobalKeys.MESSAGE_ID, "不允许重复提交!");//设置出错信息
          return (mapping.findForward("errorPage"));
       } else
         resetToken(request); //重新设置token值,可不用
       }
       ......
       return (mapping.findForward("addUserSucess"));//新增用户成功的页面
    }
  • 相关阅读:
    IndexOf、IndexOfAny 、Remove
    静态类、静态方法的使用
    面向对象 字段、方法、属性
    break、continue、return
    冒泡排序
    方法练习
    Oracle-查看oracle是否有表被锁
    教程-键盘扫描码
    网卡远程唤醒-远程开机再配合远程控制
    远程控制篇:在DELPHI程序中拨号上网
  • 原文地址:https://www.cnblogs.com/kangxuebin/p/2946244.html
Copyright © 2011-2022 走看看