序列生成在JSP页面刷新时到期

时间:2014-10-16 15:09:32

标签: java sql jsp

在JSP中注册新用户时,PID由序列生成器(SQL)自动生成。但问题出现的是当我再次刷新提交的页面save.jsp时,相同的数据再次与下一个序列值一起存储。如何避免呢?

save.jsp

response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 1); //prevents caching at the proxy server

String account = request.getParameter("account");
String username = request.getParameter("username");
String password = request.getParameter("password");
String notes = request.getParameter("notes");

String LoginUser=(String)session.getAttribute("uid");
passwords a = new passwords();

a.setLoginUser(LoginUser);
a.setAccount(account);
a.setUsername(username);
a.setPassword(password);
a.setNotes(notes);


SessionFactory sf = NewHibernateUtil.getSessionFactory();
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
s.save(a);
tx.commit();    

passwords.java

@Entity
@Table(name = "passwords")
public class passwords implements Serializable{

@Id
@SequenceGenerator(name = "B", sequenceName = "PIDSeq", allocationSize = 1)
@GeneratedValue(generator = "B", strategy = GenerationType.SEQUENCE)
int PID;
String LoginUser;
String username;
String account;
String password;
String notes;'

1 个答案:

答案 0 :(得分:0)

刷新页面时,brwoser始终发送最后一个请求,因此在第一次POST之后,下一次刷新将发送相同的POST请求。

您需要实施POST/redirect/GET paradigm

处理POST请求后,请不要直接向客户端写入响应/提供下一个资源,而是让客户端对下一个资源执行GET请求。这是通过调用HttpServletResponse#sendRedirect在jsp或servlet中完成的。这样刷新将始终触发GET请求,这很好。