Java programiranje | Problem ponovnog slanja podataka posle komande "refresh" / JSP

problem resubmisije podataka

Nakon nekoliko pročitanih tekstova problem ponovnog slanja podataka (eng. resubmission problem, PRG problem) iz ugla jave (JSP) delovao je ozbiljno. Posle tridesetak članaka (na engleskom jeziku naravno) još uvek nisam bio blizu rešenja. Naprosto problem se razrađuje u mnogim tekstovima ali iz ugla PHP-a najviše. Što se tiče jave, tada nisam našao ni jedan kompletan primer. Tu su naravno bila neka uputstva ali nedovoljno jasna. Obzirom da ni na engleskom nisam našao članak koji bi mi pomogao mogu da zamislim kako bi izgledalo na srpskom. Sve u svemu nakon pročitanih tekstova rešio sam da sprovedem ideju koja se u njima spominjala, tj. logiku za koju sam naravno sam priredio programski kod. Znam da se mnogi neće latiti jave kada već mogu da biraju PHP, međutim java je oduvek bila moj prvi izbor. Dakle, da se vratim na temu, osnovna logika je da "držite" prihvatanje parametara sa forme odvojeno od prikaza strane (u prevodu na različitim stranama). Recimo u primeru koji sledi, podaci se prihvataju i procesiraju na strani "process.jsp", zatim se prikaz koji zavisi od unosa podataka u bazu vrši na strani "your_page_for_display.jsp". Ako se "stvari" ovako postave, dugme "refresh" će pozvati ponovo samo "your_page_for_display.jsp" tako da nema prostora za ponovnu submisiju kao i ponovno prihvatanje podataka i njihov unos u bazu. Drugim rečima poznati PRG problem je rešen. Ovo je samo jedno rešenje, ima ih više. Imajte u vidu da su u primeru podaci poslati sa forme koja ima dva polja sa imenima Name i Field, kao i polje za slanje sa imenom SubmitButton.


process.jsp

<%Connection conn=null;Statement st=null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "user", "pass");
st = conn.createStatement();
if(request.getParameter("SubmitButton")!=null && !request.getParameter("Name").isEmpty() && !request.getParameter("Field").isEmpty()){
st.execute("insert into your_table (user,field) values ('" +
request.getParameter("Name") +"','" +
(String) request.getParameter("Field") + "')");
conn.close();
st.close();
response.sendRedirect("your_page_for_display.jsp");
%>

your_page_for_display.jsp

<%Connection conn=null;Statement st=null;ResultSet rs=null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "user", "pass");
st = conn.createStatement();
rs = st.executeQuery("select * from your_table");
while(rs.next())
{ out.print( rs.getString(2) +":
");
out.print(rs.getString(3);)
}
st.close(); conn.close(); rs.close(); %>

Hvala Vam na strpljenju!!