在JSP中注册新用户时,PID由序列生成器(SQL)自动生成。但问题出现的是当我再次刷新提交的页面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();
@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;'
答案 0 :(得分:0)
刷新页面时,brwoser始终发送最后一个请求,因此在第一次POST
之后,下一次刷新将发送相同的POST
请求。
您需要实施POST/redirect/GET paradigm
:
处理POST
请求后,请不要直接向客户端写入响应/提供下一个资源,而是让客户端对下一个资源执行GET
请求。这是通过调用HttpServletResponse#sendRedirect在jsp或servlet中完成的。这样刷新将始终触发GET
请求,这很好。