为什么点击刷新按钮总是重复执行插入数据库的操作呢! servlet跳转之后,return了么?后面还有什么语句,贴出来看看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是在command类中用到的调用的代码if (helper.getRequest().getParameter("subType").equals("unitjobadd")) { if (ComRegUnitjob.unitjobregcheck(helper)) { Debug.print("企业招聘信息添加成功"); ArrayList errorList=new ArrayList(); String rightmsg="企业招聘信息添加成功"; next=PageDefine.RC_COM_REGSECCESS; errorList.add(rightmsg); helper.getRequest().getSession().setAttribute("errorList",errorList); } else { next=PageDefine.RC_ERROR; }在这段程序中用到判断一些条件最后生成sql语句的类:public static boolean unitjobregcheck(RequestHelper helper){String strsql="insert unitjob;Debug.print("企业招聘职位sql语句输出"+strsql);ComRegUnitjobMap comregunitjobmap=new ComRegUnitjobMap(); comregunitjobmap.update(strsql);pass=true;return pass;}执行数据库错做的类:DBConnection dbconnection= new DBConnection();con=dbconnection.getConnection();stmt=con.createStatement(); stmt.executeUpdate(sql);Debug.println("数据库连接成功");-----------------------------------请高手们给予指教 没有办法的,你如果看一下大型网站注册就明白了,他们是通过重复ID过滤的,和重复EMAIL 这是因为每次点“刷新”的时候,浏览器会向服务器提交上次的插入请求,这种现象叫做“二次导航”。解决方法:在插入画面初始化处理的时候在session中set一个标志位,例如session.setAttribute("ins", "1");在插入处理时判断标志位是否为"1",如果是"1"则执行插入处理,否则不进行。插入成功以后remove掉这个标志位。例如:String insFlag = (String)session.getAttribute("ins");if(insFlag != null && insFlag.equals("1")) { //插入处理 ...... //插入成功以后remove标志位 session.removeAttribute("ins");} 我页面的跳转是提交给servlet处理的!这样的情况下该怎么处理呢? 长长知识:浏览器的“刷新”按钮的作用是把上一次提交给服务器端的请求在提交一次。当你进行了插入处理以后,无论在服务器端进行了多么复杂转向操作都不会被客户端的浏览器知道,当你点击“刷新”的时候,浏览器就把插入请求再向服务器提交一次(包括所有的parameters)。 你肯定是通过servlet来调用其他的类来实现“登陆页面”的初始化,以及“插入”处理的,那么就在实现“登陆页面”的初始化的servlet程序中在session中写标志位,在“插入”处理的servlet程序中判断标志位并清空标志位就可以了。 解决方法:在插入画面初始化处理的时候在session中set一个标志位,例如session.setAttribute("ins", "1");在插入处理时判断标志位是否为"1",如果是"1"则执行插入处理,否则不进行。插入成功以后remove掉这个标志位。例如:String insFlag = (String)session.getAttribute("ins");if(insFlag != null && insFlag.equals("1")) { //插入处理 ...... //插入成功以后remove标志位 session.removeAttribute("ins");} 大哥的标志位的方法是一种解决方法,我做的也是你所说的用servlet来调用其他类实现的,有没有别的解决办法呢? 这些标志位的判断是写在servlet中,还是写到jsp页面中呢?大哥 建议使用session来操作。当用户点击注册button时候,在servlet中建立一个新的session,比如为session.setAttribute("newUser",);用户提交注册后,在程序中将session清空session.removeAttribute("newUser")注册button执行的servlet: session.setAttribute("newUser",new Boolean(true));提交button执行的servlet:Boolean newUser = (Boolean)session.getAttribute("newUser");if (newUser != null) {//注册操作session.removeAttribute("newUser")}当用户注册成功后,刷新页面的时候,由于此时的newUser的session,已经为空了,不在执行用户注册操作,即可避免以上的情况。 标志位写在servlet中!其它的类中不太好解决。 谢谢kadina(次帅) 个各位朋友的指点!因为我做的网站是人才网,我在中国国家人才网也发现了这个问题,而且它也没有解决,有很多的网站都有类似的问题!这个问题我解决了,谢谢!给分! 关于jdk配置正确但是tomcat服务器启动时一闪而过的解决办法 注册用js验证的问题?? 怎样学好JSP 跪求,jsp 页面更改保存后,访问页面无法更新问题 jsp怎么读取数据库里面的rtf格式二进制文件 关于JAVASCRIPT,在线考试的记时器,大哥大姐求助啊,我这个记时器为什么没显示啊! java中调用c++程序中的运用 为什么执行总进入catch部分 CAS获取company报错转换失败! SSM版淘淘商城 添加商品出现400错误 很简单的 帮我看看 我的JSP 哪里出错了 大家求救啊 :javaScipt中的变量复值后到Servlet 中就取出来是空????
if (helper.getRequest().getParameter("subType").equals("unitjobadd"))
{
if (ComRegUnitjob.unitjobregcheck(helper))
{
Debug.print("企业招聘信息添加成功");
ArrayList errorList=new ArrayList();
String rightmsg="企业招聘信息添加成功"; next=PageDefine.RC_COM_REGSECCESS;
errorList.add(rightmsg);
helper.getRequest().getSession().setAttribute("errorList",errorList); }
else
{
next=PageDefine.RC_ERROR;
}
在这段程序中用到判断一些条件最后生成sql语句的类:
public static boolean unitjobregcheck(RequestHelper helper)
{
String strsql="insert unitjob;
Debug.print("企业招聘职位sql语句输出"+strsql);
ComRegUnitjobMap comregunitjobmap=new ComRegUnitjobMap();
comregunitjobmap.update(strsql);
pass=true;
return pass;
}
执行数据库错做的类:
DBConnection dbconnection= new DBConnection();
con=dbconnection.getConnection();
stmt=con.createStatement();
stmt.executeUpdate(sql);
Debug.println("数据库连接成功");-----------------------------------
请高手们给予指教
没有办法的,你如果看一下大型网站注册就明白了,他们是通过重复ID过滤的,和重复EMAIL
解决方法:
在插入画面初始化处理的时候在session中set一个标志位,例如session.setAttribute("ins", "1");
在插入处理时判断标志位是否为"1",如果是"1"则执行插入处理,否则不进行。插入成功以后remove掉这个标志位。
例如:
String insFlag = (String)session.getAttribute("ins");
if(insFlag != null && insFlag.equals("1")) {
//插入处理
......
//插入成功以后remove标志位
session.removeAttribute("ins");
}
在插入画面初始化处理的时候在session中set一个标志位,例如session.setAttribute("ins", "1");
在插入处理时判断标志位是否为"1",如果是"1"则执行插入处理,否则不进行。插入成功以后remove掉这个标志位。
例如:
String insFlag = (String)session.getAttribute("ins");
if(insFlag != null && insFlag.equals("1")) {
//插入处理
......
//插入成功以后remove标志位
session.removeAttribute("ins");
}
当用户点击注册button时候,在servlet中建立一个新的session,比如为session.setAttribute("newUser",);用户提交注册后,在程序中将session清空session.removeAttribute("newUser")注册button执行的servlet:
session.setAttribute("newUser",new Boolean(true));
提交button执行的servlet:
Boolean newUser = (Boolean)session.getAttribute("newUser");
if (newUser != null) {
//注册操作
session.removeAttribute("newUser")
}
当用户注册成功后,刷新页面的时候,由于此时的newUser的session,已经为空了,不在执行用户注册操作,即可避免以上的情况。
这个问题,而且它也没有解决,有很多的网站都有类似的问题!这个问题我解决了,谢谢!
给分!