首页 > 其他 > 详细

Struts中的 saveToken的方法

时间:2014-01-15 23:58:40      阅读:590      评论:0      收藏:0      [点我收藏+]

Struts中的 saveToken的方法

   
saveToken防止2次提交的问题

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

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

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

具体逻辑如下:

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

Struts中的 saveToken的方法

原文:http://www.cnblogs.com/peter-peng/p/3516030.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!