首页 > 代码库 > Servlet中表单的重复提交
Servlet中表单的重复提交
1.用户登录页面:
->设置一个UUID到session中
->将UUID添加到隐藏域中,提交到服务器
<% //进入页面,设置一个UUID,将UUID添加到session中 String token=UUID.randomUUID().toString(); session.setAttribute("token", token); %> <form action="userlogin" method="POST" > <!-- 定义一个隐藏域,将设置的Session对象UUID提交上去 --> <input type="hidden" value="${token}" name="token"> 用户名:<input type="text" name="username" placeholder="请输入用户名" required /><br/><br/> 密 码:<input type="password" name="password" placeholder="请输入密码" required /><br/><br/> <input type="submit" value="登录"/> </form>
2.服务器端:
-->拿到面页传过来隐藏表单里面的token和session里面的token
-->判断两个token是否相等,假如相等,先将之前页面上设置的session移除,再进行业务处理
-->注意:这里移除session并不是页面中的隐藏域不会传token过来,只是穿过来的token和第一次穿过来的值不一样,这样,就避免了表单重复提交.
具体代码如下:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 表单重复提交验证 * * @author Decepticon * */ @WebServlet("/userlogin") public class SubmitValidate extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取到JSP隐藏表单里的token String token = request.getParameter("token"); // 获取session对象 HttpSession session = request.getSession(); // 获取面页session中的token的值 String sessionToken = (String) session.getAttribute("token");// 将面页传过来的隐藏表单中的token值和session中设置的token值做比较 if (token.equals(sessionToken)) { // 如果一样,移除面页的session值 request.getSession().removeAttribute("token"); PrintWriter writer = response.getWriter(); writer.write("HelloWorld!"); writer.close(); } else { PrintWriter writer = response.getWriter(); writer.write("Please don‘t always click"); writer.close(); } } }
Servlet中表单的重复提交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。