教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 Struts2 防止表单重复提交笔记

Struts2 防止表单重复提交笔记

发布时间:2016-11-04   编辑:jiaochengji.com
教程集为您提供Struts2 防止表单重复提交笔记等资源,欢迎您收藏本站,我们将为您提供最新的Struts2 防止表单重复提交笔记资源
我今天测试了很多的网站都是随便点击一下提交就可以提交数据或重复提交数据了,做得最多的就是提交之后会有判断但是也发现触发了服务器脚本了,下面来给大家介绍一个Struts2 防止表单重复提交的例子分析。

下面我们来看一个例子

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7241')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7241>

public class HelloServlet extends HttpServlet {
 private int i = 0;

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String userName = req.getParameter("name");
  String password = req.getParameter("password");
  int count = 0;
  for (int i = 0; i < 1000; i ) {
   count ;
  }

  resp.getWriter().println(
    i ": hello" userName " your password is " password);
  i ;
 }
}


input.jsp

<body>

    <form action="Hello"method="post">

    <input type="text"name="name"><br>

    <input type="text"name="password"><br>

    <input type="submit"value="submit">

    </form>

  </body>

测试(提交后刷新页面):

\'Struts2

\'Struts2


我们看到,在提交之后,刷新页面,同样会触发服务端的操作!

session方式防止重复提交

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy6602')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy6602>

InputServlet.java

public class InputServlet extends HttpServlet {
 
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  
  String token = String.valueOf(System.currentTimeMillis());
  req.setAttribute("token",token);
  req.getSession().setAttribute("token",token);
  
  RequestDispatcher rd = req.getRequestDispatcher("/input.jsp");
  rd.forward(req,resp);
 }
}

HelloServlet.java

public class HelloServlet extends HttpServlet {

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {

  String reqToken = req.getParameter("token");
  String sessionToken = (String) req.getSession().getAttribute("token");

  if (reqToken == null || !reqToken.equals(sessionToken)) {

   resp.getWriter().println("repeat submit");
   return;
  }
  
  //删除session中的token
  req.getSession().removeAttribute("token");

  String userName = req.getParameter("name");
  String password = req.getParameter("password");
  int count = 0;
  for (int i = 0; i < 1000; i ) {
   count ;
  }

  resp.getWriter().println(
    ": hello" userName " your password is " password);
 }
}
input.jsp

<body>

       <form action="Hello"method="post">

           <input type="text" name="name">

           <br>

           <input type="text" name="password">

           <br>

           <input type="hidden" name="token"

              value=<%=request.getAttribute("token")%>/>

           <br />

           <input type="submit" value="submit">

       </form>

    </body>

测试(访问InputServlet):


\'Struts2

这时我们查看页面源代码:

\'Struts2

可以看到增加了一个hidden类型的token表单。
提交页面:
\'Struts2
我们刷新页面:

\'Struts2

您可能感兴趣的文章:
Struts2 防止表单重复提交笔记
struts2之防止表单重复提交
php防止表单重复提交的小例子
php token防止表单重复提交的实例代码
js实现防止表单重复提交的代码
Asp.net防刷新重复提交与防后退的方法
jquery 防止表单重复提交代码
asp.net防止后退与重复提交表单的简单方法
Struts2处理结果的学习笔记
php防止用户刷新 重复提交的方法

[关闭]
~ ~