Struts中的saveToken的方法的使用

本文介绍Struts框架中如何利用内置Token机制防止表单重复提交,通过具体示例讲解了从生成Token到验证Token的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  为了方便,用户表只有两个字段用户名和密码:

  具体逻辑如下:

  index.jsp--链接-->PrepareAddUserAction.java--转发并生成token-->addUser.jsp--提交-->

  AddUserAction.java--首先校验'是否重复提交',是提示错误信息,不是,执行数据库操作.

  部分相关代码(省略formbean的代码):

  ========index.jsp========

  新增用户

  =========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,即

  ============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"));//新增用户成功的页面

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值