黑马day05 session实现防止重复提交&小案例

有时候为了防止用户的重复提交我们只需要写前台的代码,一个javaScript就搞定了,但是也不妨坏人故意修改源代码,这样就防止不了重复提交,因此,我们在后台实现防止重复提交。

1.login.jsp 前台java|Script实现防止重复提交,为了后台也实现所以设置了一个随机数到session域中,然后提交表单的时候就隐藏一个随机数。以实现SubServlet的获取

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title></title>

	<meta http-equiv=" pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<script type="text/javascript">
		var isNotSub=true;//没有重复提交
		function cansub(){
			if(isNotSub){//没有重复提交
				isNotSub=false;
				return true
			}else{
				alert("清不要重复提交!");
				return false;
			}
		}
	</script>
  </head>

  <body>
  <%--随机数 --%>
  <%
  Random r=new Random();
  int randomNum=r.nextInt();
  session.setAttribute("randomNum", randomNum+"");//域对象中
   %>

  <form action="${pageContext.request.contextPath }/servlet/ResubServlet" onsubmit="return cansub();" method="post">
  	姓名:<input type="text" name="username">
  	<input type="hidden" name="randomNum" value="<%=randomNum%>"/>
    <input type="submit" value="提交"/>
  </form>
  </body>
</html>

2.SubServet实现后台的防止重复提交,如果用户是第一次提交就判断从session中取到的随机数和从表单中获取的hidden中的随机数是否一样,如果一样,则将session中域对象清空,然后输出相应的数据到浏览器,如果不一样说明是重复提交了,这个时候session中的域对象已经是null,所以两个值不相等。就提醒用户不能重复提交。

package cn.itheima.resubmit;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResubServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		try {
			Thread.sleep(1000*4);
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}
		String r1 = request.getParameter("randomNum");
		String r2 = (String) request.getSession().getAttribute("randomNum");
		if(r2!=null&&!"".equals(r2)&&r1.equals(r2)){
			request.getSession().removeAttribute("randomNum");//第一次提交后就把session中的对象移除
			response.getWriter().write("姓名是:"+username);
		}else{
			response.getWriter().write("请不要重复提交!ok?!");
		}

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

运行结果:

如果重复提交的话:也就是说一直点击提交按钮.....前台和后天的提示:

时间: 2024-10-10 14:06:55

黑马day05 session实现防止重复提交&小案例的相关文章

JAVA–利用Filter和session防止页面重复提交

JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览器,用户填充数据后提交请求;3 请求经过过滤器,过滤器获取表单中的令牌进行验证,如果和之前生成的令牌一致,则将请求放行,并且清空令牌;4 如果用户重复提交表单,请求经过过滤器,过滤器进行验证.因为第一次放行后令牌已经清空失效,令牌不一致,不放行.跳转到提醒界面. 需用知识:1 过滤器基础知识2 se

黑马day05 session&amp;重新设置JSESSIONID的生命周期

HttpSession:在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息. 4.1session作为域使用:他是j2ee中四大域对象之一,作用范围为整个会话. 4.2session的生命周期:在第一次调用reqeust.getSession()方法的时候,服务器会检查是已经有对应的session,如果没有就在内存中创建一个session并返回. 当一段时间内session没有被使用,一般为30分钟(此值可以在web.xml中配置<session-config>来配置,也可以

黑马day05 session实现登陆&amp;注销小案例

本案例主要使用session实现登录与注销的功能. 1.登录页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title&g

cookie和session页面随机数和防止重复提交

http 无状态的协议,每次请求都是独立的我们不能存储第一次访问的数据 Cookie 实现访问请求的数据保存 将服务器中的一小段,存入浏览器中放在浏览器中的cookie中,是存入浏览器中. 优点:减少服务器的压力 缺点:不安全,存储的数据单一,只能为字符串,可以通过路由器获得所有的cookie 1. 添加cookie 2. 获得cookie 3. 解决中文乱码问题 4. 修改cookie的两种方式(cookie为键值对,key值不能重复,或者cookie.setvalues()) 5. 生命周期

session的两个小案例

学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信息存入session中,另一个servlet在处理的时候,会先从session中拿到用户的信息,判断是否登陆,再执行相应的动作.主要模拟一下我们常见的场景:登陆后,网页上会显示:欢饮您,xxx. 首先我们看一下欢迎页面index.jsp(这里只是简单的模拟下,后面学了jsp的标签后可以弄的更加人性化

[原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Servlet/JSP-07 Session应用:避免表单重复提交

Session应用:避免表单重复提交 一. 表单的重复提交 1. 重复提交的情况 ①在表单提交到一个 Servlet,而 Servlet 又通过请求转发的方式响应了一个 JSP 或者 HTML 页面,此时浏览器地址栏还保留着 Servlet 路径,在此响应页面点击”刷新“按钮 ② 在响应页面尚未到达时,重复点击表单的”提交“按钮 ③ 点击”返回“按钮或者浏览器的回退按钮,再点击”提交“按钮 2.如何避免表单重复提交? 原理:在表单中做一个标记,当表单提交到Servlet时,检查标记是否存在且是否

JavaWeb学习总结(十三)——使用Session防止表单重复提交

在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提交的常见应用场景 有如下的form.jsp页面 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML>

session ---- 防止表单重复提交

1. package cn.itcast.form; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import ja