当前位置:我的异常网» Java Web开发 » 请教怎样处理退后刷新页面的重复提交有关问题?多谢
请教怎样处理退后刷新页面的重复提交有关问题?多谢
www.myexceptions.net 网友分享于:2013-01-19 浏览:13次
请问怎样处理退后刷新页面的重复提交问题?谢谢
我写了一个的简单的BBS小例子:
遇到的问题,简单一点来说:reply.jsp和acceptReply.jsp
reply.jsp是一个简单的表单页面,用来输入内容;acceptReply.jsp接受并存入数据库!
源代码(主要):
reply.jsp内容很简单,就是一个提交!
acceptReply.jsp源码:
//设置页面不缓存
/*
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("EXpires", 0);
*/
request.setCharacterEncoding("gbk");
//从相应的reply页面获得的参数
String title = request.getParameter("title");
String content = request.getParameter("cont");
if (title == null || title.equals("") || content.equals("")
|| content == null) {
out.print("你的输入有误,请重新发帖!");
return;
}
String strPid = request.getParameter("pid");
String strRootid = request.getParameter("rootid");
int pid;
int rootid;
try {
pid = Integer.parseInt(strPid);
rootid = Integer.parseInt(strRootid);
} catch (NumberFormatException e) {
e.printStackTrace();
out.print("你的输入有误,请重新发帖!");
return;
}
//连接数据库,并做相应的操作(封装在一个bean里,但实现的不怎么好,有待改进)
Connection con = DB.getConnection();
con.setAutoCommit(false);
String sql = "insert into article value (null, ?, ?, ?, ?, now(), ?)";
PreparedStatement pst = DB.getPreSt(con, sql);
pst.setInt(1, pid);
pst.setInt(2, rootid);
pst.setString(3, title);
pst.setString(4, content);
pst.setInt(5, 0);
pst.executeUpdate();
DB.close(pst);
Statement st = DB.createStatement(con);
String changeSql = "Update article set isleaf = 1 where id = "
+ pid;
st.executeUpdate(changeSql);
con.commit();
con.setAutoCommit(true);
DB.close(st);
DB.close(con);
//以为是request对象的原因,但去掉也不行!
//request.removeAttribute("title");
//request.removeAttribute("cont");
%>
查看新发表帖子,三秒钟后会自动跳转
因为这有个三秒的自动跳转,但是我再次退回到acceptReply.jsp ,因为有三秒的延迟,我手动再次刷新页面,它就会再次提交和上一次同样的内容,并存入到数据库!
我是用了数据库的查看限制来做的,但觉得很不合理,效率也太低!我想问一下,大家是怎么做的?谢谢高手了!期盼中!
------解决方案--------------------
参考这个
Java进行程序的Post表单提交检查,防止非法和重复提交的分析
文章评论