Struts2 防止表单重复提交笔记

作者:简简单单 2014-06-17

下面我们来看一个例子

 代码如下 复制代码

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

   

   

   

   

   

 

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

Struts2 防止表单重复提交笔记

Struts2 防止表单重复提交笔记


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

session方式防止重复提交

 代码如下 复制代码

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

      

          

          

          

          

          

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

          

          

      

   

测试(访问InputServlet):


Struts2 防止表单重复提交笔记

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

Struts2 防止表单重复提交笔记

可以看到增加了一个hidden类型的token表单。
提交页面:
Struts2 防止表单重复提交笔记
我们刷新页面:

Struts2 防止表单重复提交笔记

相关文章

精彩推荐