- 浏览: 618180 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
AlanKay:
Mart_dai 写道Hi 齐晓威_518,我想问问,在exc ...
java 后台 Excel 文件生成后转化为字节流 -
18335864773:
国内的pageoffice插件也可以生成excel。也可以用流 ...
java 后台 Excel 文件生成后转化为字节流 -
JAVA_CLASSm:
你好,请问这个还有源码吗?我刚开始接触这个,想要源码学习一下. ...
同一账号不能多地登录(限制同一账号同一时刻只能一个用户登录使用,向QQ一样) -
pangjinquan:
...
前台JS获取后台的Json数据, 动态创建table并填充数据--转自一位朋友 -
lvjun106:
这是增加删除列,,,,
JQuery自动为表格增加一列
个人学习笔记,写下方便以后复用。
当我们写了个注册页面时候,用户完成注册并提交,用户注册的资料并录入数据库保存,最不希望出现的是在一个会话中出现多次提交的结果,我们可以通过为请求设置标记来避免此类事件的发生。
1.为每个请求设置一个标记,当此页面是首次被请求时,生成标记并放入session中,并且把此生成的标记的值作为隐含标签传递到处理页面
2.提交表单时,跳转页面处理请求中的标记,如果判断请求中session对象的标记和隐含标签中的值相同,处理请求,并将session中的标记值去除
( TokenGen.java)
package com.beans;
import java.util.*;
import javax.servlet.http.*;
public class TokenGen {
private static TokenGen instance = new TokenGen();
private TokenGen() {}
public static TokenGen getInstance() {
return instance;
}
public synchronized boolean isTokenValid(HttpServletRequest request) {
// 没有session,判为非法
HttpSession session = request.getSession(false);
if (session == null)
return false;
// session中不含token,
// 说明form被提交过后执行了resetToken()清除了token
// 判为非法
String stoken = (String) session.getAttribute("token");
if (stoken == null)
return false;
// request请求参数中不含token,
// 判为非法
String rtoken = request.getParameter("token");
if (rtoken == null)
return false;
// request请求中的token与session中保存的token不等,判为非法
return stoken.equals(rtoken);
}
/*
* 重新设置token,当页面被请求后,将session中的token属性去除
*/
public synchronized void resetToken(HttpServletRequest request)
{
HttpSession session = request.getSession(false);
if (session!=null)
{
session.removeAttribute("token");
}
}
/*
* 为请求新建一个token标记,此标记由一个随机的double数toString形成,并把字符值存入session中
*/
public synchronized void saveToken(HttpServletRequest request)
{
HttpSession session = request.getSession(true);
Random rand = new Random();
Double d = rand.nextDouble();
session.setAttribute("token", d.toString());
}
}
(form.jsp) 其中加粗加红为生成token标记的代码
<%@ page language="java" import="com.beans.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册页面1</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<%
TokenGen.getInstance().saveToken(request);
String s = (String)session.getAttribute("token");
%>
<body>
<form id="form1" name="form1" method="post" action="register.jsp">
<table align="center">
<tr>
<td colspan="2"><br><input type="hidden" name="token" value="<%=s%>"/>
</td>
</tr>
<tr>
<td align="right">
用户名:
</td>
<td>
<input type="text" name="t1" />
</td>
</tr>
<tr>
<td align="right">
密码:
</td>
<td>
<input type="password" name="t2" />
</td>
</tr>
<tr>
<td align="right">
确认密码:
</td>
<td>
<input type="password" name="t3" />
</td>
</tr>
<tr>
<td align="right">
性别:
</td>
<td>
<input type="radio" name="radio" id="radio" value="boy" />
男
<input type="radio" name="radio" id="radio2" value="gril" />
女
</td>
</tr>
<tr>
<td align="right">
个人说明:
</td>
<td>
<textarea name="textraea1" rows="15" cols="60"></textarea>
</td>
</tr>
<tr>
<td align="right">
<input type="submit" name="button" id="button" value="提交" />
</td>
<td>
<input type="reset" name="button2" id="button2" value="重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
(register.jsp)处理请求
<%@ page language="java" import="com.beans.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>处理注册页面1</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
TokenGen tokenGen=TokenGen.getInstance();
if (!tokenGen.isTokenValid(request))
{
out.print("这是重复提交或非法提交!");
}
else
{
// 处理请求,并执行resetToken方法,将session中的token去除
tokenGen.resetToken(request);
}
%>
</body>
</html>
其中还有一种是通过设置时间间隔来限制重复提交,其实现原理和上面的大同小异。
当我们写了个注册页面时候,用户完成注册并提交,用户注册的资料并录入数据库保存,最不希望出现的是在一个会话中出现多次提交的结果,我们可以通过为请求设置标记来避免此类事件的发生。
1.为每个请求设置一个标记,当此页面是首次被请求时,生成标记并放入session中,并且把此生成的标记的值作为隐含标签传递到处理页面
2.提交表单时,跳转页面处理请求中的标记,如果判断请求中session对象的标记和隐含标签中的值相同,处理请求,并将session中的标记值去除
( TokenGen.java)
package com.beans;
import java.util.*;
import javax.servlet.http.*;
public class TokenGen {
private static TokenGen instance = new TokenGen();
private TokenGen() {}
public static TokenGen getInstance() {
return instance;
}
public synchronized boolean isTokenValid(HttpServletRequest request) {
// 没有session,判为非法
HttpSession session = request.getSession(false);
if (session == null)
return false;
// session中不含token,
// 说明form被提交过后执行了resetToken()清除了token
// 判为非法
String stoken = (String) session.getAttribute("token");
if (stoken == null)
return false;
// request请求参数中不含token,
// 判为非法
String rtoken = request.getParameter("token");
if (rtoken == null)
return false;
// request请求中的token与session中保存的token不等,判为非法
return stoken.equals(rtoken);
}
/*
* 重新设置token,当页面被请求后,将session中的token属性去除
*/
public synchronized void resetToken(HttpServletRequest request)
{
HttpSession session = request.getSession(false);
if (session!=null)
{
session.removeAttribute("token");
}
}
/*
* 为请求新建一个token标记,此标记由一个随机的double数toString形成,并把字符值存入session中
*/
public synchronized void saveToken(HttpServletRequest request)
{
HttpSession session = request.getSession(true);
Random rand = new Random();
Double d = rand.nextDouble();
session.setAttribute("token", d.toString());
}
}
(form.jsp) 其中加粗加红为生成token标记的代码
<%@ page language="java" import="com.beans.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册页面1</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<%
TokenGen.getInstance().saveToken(request);
String s = (String)session.getAttribute("token");
%>
<body>
<form id="form1" name="form1" method="post" action="register.jsp">
<table align="center">
<tr>
<td colspan="2"><br><input type="hidden" name="token" value="<%=s%>"/>
</td>
</tr>
<tr>
<td align="right">
用户名:
</td>
<td>
<input type="text" name="t1" />
</td>
</tr>
<tr>
<td align="right">
密码:
</td>
<td>
<input type="password" name="t2" />
</td>
</tr>
<tr>
<td align="right">
确认密码:
</td>
<td>
<input type="password" name="t3" />
</td>
</tr>
<tr>
<td align="right">
性别:
</td>
<td>
<input type="radio" name="radio" id="radio" value="boy" />
男
<input type="radio" name="radio" id="radio2" value="gril" />
女
</td>
</tr>
<tr>
<td align="right">
个人说明:
</td>
<td>
<textarea name="textraea1" rows="15" cols="60"></textarea>
</td>
</tr>
<tr>
<td align="right">
<input type="submit" name="button" id="button" value="提交" />
</td>
<td>
<input type="reset" name="button2" id="button2" value="重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
(register.jsp)处理请求
<%@ page language="java" import="com.beans.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>处理注册页面1</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
TokenGen tokenGen=TokenGen.getInstance();
if (!tokenGen.isTokenValid(request))
{
out.print("这是重复提交或非法提交!");
}
else
{
// 处理请求,并执行resetToken方法,将session中的token去除
tokenGen.resetToken(request);
}
%>
</body>
</html>
其中还有一种是通过设置时间间隔来限制重复提交,其实现原理和上面的大同小异。
发表评论
-
input文本框、文字、按钮、图片 垂直居中对齐的解决办法 .
2014-07-10 21:12 44841.input 文本框 文字垂直居中对齐 表单默认i ... -
java 后台 Excel 文件生成后转化为字节流
2014-03-13 20:49 46184java 后台 Excel 文件生成后转化为字节流 ja ... -
jquery ajaxform上传文件返回不提示信息的问题
2014-03-13 20:47 824在使用jquery的ajaxform插件进行ajax提交表单 ... -
Java/JSP中使用response.getWriter().write(json.toString());或json.write(response.getW
2014-03-13 20:46 9211Java/JSP中使用response.getWriter( ... -
web 前端 javascript RSA加密提交数据,server端用java解密
2014-02-20 21:28 6328前几天user有个要求,就是系统中所有的密码输入框的内容( ... -
表单数据的加密传输
2014-02-17 21:12 1363一、表单数据的提交 ... -
jsp中img显示本地图片
2014-03-18 23:17 1312在web应用中是不能访问本地文件De,可以把要引用的文件移 ... -
jsp中获得的路径的方法
2014-02-20 21:30 663以工程名为TEST为例: (1)得到包含工程名的当前页面全 ... -
jsp页面用自定义标签显示Clob类型数据
2014-01-07 22:09 1030/** * File Name: ClobToS ... -
图片预览-放大镜效果
2014-04-09 21:43 1160<html><head> & ... -
js模式对话框实现用户登录
2013-12-03 22:30 786采用ModalDialog做登录,最大优点就是省去了传递u ... -
js跳转页面方法
2013-12-03 22:28 618<span id="tiao"& ... -
js showModalDialog
2013-12-03 22:12 1107关于window.showModalDialog()打开模 ... -
jQuery解决iframe高度自适应的一例代码
2014-03-02 16:51 900在包含iframe的页面中加入以下脚本,在iframe加载 ... -
如何在有很多图片的iframe页面中用js动态设置iframe的高度
2014-03-18 23:18 2868在iframe的网页中用js动态设置iframe的高度不难 ... -
将file标签的"浏览"按钮换成别的语言或图片(转自别人)
2013-11-19 22:53 1372如何将INPUT type=file 的"浏览. ... -
如何用jsp读取数据库中的二进制图象
2013-11-18 22:29 2443showImage.jsp <%@ page lan ... -
java以Blob形式存储,读取图片并在jsp页面显示图片流
2013-11-18 22:27 3282封装好的ImageUtil类:目的读取本地的图片文件并存入 ... -
js实现前台动态添加文本框,后台获取文本框内容
2013-11-13 22:45 4041<%@ page language="ja ... -
jsp页面上有一个button, 点击一次增加一个文本框,当文本框为四个时,自动换行
2013-11-13 22:36 2785<!DOCTYPE HTML PUBLIC &quo ...
相关推荐
在Web开发中,尤其是使用JavaServer ...综上所述,防止JSP页面表单重复提交是一个涉及客户端和服务器端协作的过程。开发者应根据项目的具体需求和场景,选择合适的方法或组合使用多种策略,以确保数据安全和系统性能。
该方法可以防止页面刷新重复提交,因为每次提交表单时,JavaScript 会发送一个异步请求到服务器,服务器验证该请求是否正确,然后返回结果。 四、总结 防止页面刷新重复提交是 Web 开发中非常重要的问题,为了防止...
下面详细解释几种防止Layui表单重复提交的方法。 首先,在HTML表单中,为了避免在提交时页面刷新导致的重复提交,可以在标签中使用onsubmit="return false;"属性。这个属性的作用是在表单提交时返回false,阻止...
### ASP.NET中防止刷新页面造成表单重复提交 在Web应用程序开发中,特别是在使用ASP.NET进行网站构建时,一个常见的问题是表单重复提交。这通常发生在用户通过按下浏览器的F5键来刷新页面的情况下,此时之前的表单...
在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或错误。JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最...
以下是如何在使用Element-UI时防止重复提交的具体方法: 1. 对话框(Dialog)内的表单提交: 错误方案常常是在最后的回调函数中同时隐藏Dialog和恢复提交按钮的可点击性。问题在于Dialog的隐藏是一个动画过程,这...
本篇文章将深入探讨如何防止表单重复提交,主要关注于基于Struts2框架的解决方案。 首先,理解表单重复提交的原因。用户在点击提交按钮后,如果网络延迟或用户误操作导致页面刷新或再次点击提交,就可能发生重复...
2. **防止表单重复提交的方法**: - **服务器端验证**: - 使用`Session`或`Viewstate`来记录用户是否已经提交过表单。一旦表单提交成功,将一个标识存储在会话或视图状态中,后续的提交请求检查该标识,若存在则...
然而,这种方法并不能完全防止所有情况下的重复提交,因为某些用户可能使用浏览器的刷新功能或者在网络延迟后多次点击。 ASP.NET MVC框架提供了一些内置机制来处理此问题。例如,可以使用`AntiForgeryToken`辅助...
Struts2作为一个流行的Java Web框架,为解决表单重复提交提供了多种方法。 首先,关于表单重复提交的原因,有以下几点: 1. 服务器或网络延迟导致用户多次点击提交按钮。 2. 用户在表单提交后刷新浏览器页面。 ...
表单重复提交是指在一次请求完成之前防止重复提交,解决表单重复提交有多种形式,以下以 Aop+自定义注解+Redis 为例来介绍。 解决方案的详细流程 1. 当页面加载时,前端请求后台,后台生成 token 缓存到 Redis ...
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
几种防止表单重复提交的方法 禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说...
防止表单重复提交的方法有多种,除了ThinkPHP的表单令牌机制,还可以采用以下策略: 1. 使用HTTP的幂等性:GET和HEAD方法天生就是幂等的,即多次执行同一请求,结果不会改变。POST、PUT和DELETE等非幂等方法则需...
### 防止页面的重复提交和刷新 #### 一、引言 在现代Web应用开发过程中,确保数据完整性与用户体验至关重要。其中,“防止页面的重复提交和刷新”这一问题尤为关键,它不仅关系到系统的稳定性,还直接影响用户体验...
本示例"防止页面重复提交demo"将介绍一种结合前端控制与后台session存储随机token的方法来解决这个问题。 首先,我们要理解页面重复提交可能产生的原因。通常,用户在点击提交按钮后,由于网络延迟或刷新页面,可能...
浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...