Saya sedang menulis sebuah program, tetapi saya mengalami masalah: ketika saya me-refresh halaman jsp, sistem akan secara otomatis mengirimkan ulang seluruh halaman, dan saya tidak tahu bagaimana cara menghindarinya, adakah yang bisa membantu saya?
Berikut ini adalah penjelasan mengenai masalahnya...
Mengklik tombol "kirim" pada formulir akan mengirimkan permintaan ke server web, yang mencakup semua data yang dimasukkan pada formulir. Tidak hanya URL tetapi juga data formulir adalah bagian dari permintaan, dan permintaan ini diingat oleh browser. Jika pengguna mengklik "refresh", browser akan mengulangi permintaan tersebut, mengirimkan URL yang sama dan data formulir ke server web lagi.
Tetapi formulir dapat dikirimkan dengan dua cara yang berbeda, GET atau POST, tergantung pada atribut "metode" dari tag "formulir". Ada sebuah konvensi bahwa permintaan GET tidak memiliki efek samping; permintaan ini hanya mengambil data tetapi tidak membuat perubahan apa pun pada basis data. Di sisi lain, jika sebuah permintaan mengubah data, maka harus selalu menggunakan permintaan POST. Seperti yang saya katakan, ini hanya konvensi, dan tidak banyak perbedaan teknis di antara keduanya, tetapi perbedaan yang sangat penting adalah browser akan memperingatkan pengguna jika mereka mencoba mengulang POST - mengklik "refresh" akan memunculkan kotak dialog yang memperingatkan pengguna bahwa hal ini dapat menyebabkan operasi diulang, dan mengkonfirmasi bahwa mereka benar-benar ingin mengirim ulang. Browser tidak menampilkan konfirmasi ini ketika me-refresh permintaan GET.
Apakah formulir Anda menggunakan metode GET, seperti yang dicurigai oleh @mk? Jika iya, mengubahnya menjadi POST adalah solusi yang paling sederhana, karena ini setidaknya berarti pengguna akan diperingatkan jika mereka mencoba me-refresh.
Tetapi solusi yang lebih baik adalah idiom POST+REDIRECT+GET yang disarankan oleh @cletus. Ini membagi pembaruan basis data (POST) dan tampilan (GET) menjadi dua operasi. Mengklik refresh pada browser hanya mengulangi GET, yang tidak memiliki efek samping.
Ungkapan yang Anda inginkan di sini adalah salah satunya:
POST+REDIRECT+GET bekerja seperti ini:
Manfaat dari hal ini adalah bahwa mengklik muat ulang tidak akan mengirim ulang formulir. Juga jika Anda mengklik tombol kembali pada browser, Anda tidak akan diminta untuk mengisi kotak dialog "kirimkan lagi".
Berikut ini adalah contoh JSP dari hal ini.
Pengiriman AJAX berarti bahwa alih-alih mengirimkan formulir kembali ke server dalam arti tradisional, Anda membuat permintaan AJAX kembali ke server dengan data formulir. Pengiriman tersebut melakukan apa yang seharusnya dilakukan. Mengklik reload hanya akan memuat ulang halaman. Ini tidak akan mengirim ulang permintaan AJAX.
Jangan gunakan GET untuk mengirimkan atau mengubah data. Gunakan POST sebagai gantinya. Anda harus mengubah formulir Anda untuk membaca
<form action="test.jsp" method="get">
Lihat http://www.google.com/search?q=get+post untuk info lebih lanjut.
(Pertanyaan Anda juga kurang jelas - apakah yang Anda maksudkan adalah menyegarkan kembali di peramban, atau di kontainer (misalnya Tomcat)? Apa yang Anda maksud dengan mengirim ulang halaman? Halaman tidak bisa dikirim, hanya formulir yang bisa. Sistem yang mana? Saya sudah bisa menebak apa yang Anda maksud, jika Anda bermaksud lain, beritahu kami).