1. toko buku paket; 2. impor javax.servlet.http.HttpSessionBindingListener; 3. impor javax.servlet.http.HttpSessionBindingEvent; 4. impor java.sql.*; 5. impor formulir java.text.SimpleDate di; 6. impor java.util.Date; 7. 8. Pengguna kelas publik mengimplementasikan HttpSessionBindingListener 9.{ 10.… 11. private String loginDatetime; //Waktu login pengguna 12.… 13. public void valueBound (acara HttpSessionBindingEvent) 14.{ 15. Sambungan koneksi = null; 16. String sqlStr = "masukkan ke T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " + 17. "nilai(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )"; 18. mencoba 19.{ 20. samb = DBConnection.getConnection(); 21. PreparedStatement pStat = samb.prepareStatement(sqlStr); 22. loginDatetime = getCurrDatetimeStr(); //string waktu saat ini 23. pStat.setString(1, ID pengguna); 24. pStat.setString(2, loginDatetime); 25. pStat.executeUpdate(); 26. 27. } tangkapan (SQLException e) 28.{ 29. lemparkan RuntimeException baru( 30. "Kesalahan menulis log login pengguna"); 31. } akhirnya 32.{ 33. mencoba 34.{ 35. jika (sambungan != nol) 36.{ 37. samb.close(); 38. } 39. } tangkapan (SQLException ex) 40.{ 41. ex.printStackTrace(); 42. } 43. } 44. } 45. 46. nilai kekosongan publikTidak terikat(acara HttpSessionBindingEvent) 47.{ 48. Sambungan koneksi = null; 49. String sqlStr = " perbarui T_LOGIN_LOG setel DT_LONOUT = ? " + 50. "di mana USER_ID=? dan DT_LOGIN = ?"; 51. coba 52.{ 53. samb = DBConnection.getConnection(); 54. PreparedStatement pStat = samb.prepareStatement(sqlStr); 55. pStat.setString(1, getCurrDatetimeStr()); 56. pStat.setString(2, ID pengguna); 57. pStat.setString(3, loginDatetime); 58. pStat.executeUpdate(); 59. 60. } tangkapan (SQLException e) 61.{ 62. melempar RuntimeException baru( 63. "Kesalahan saat menulis log keluar pengguna"); 64. } akhirnya 65.{ 66. mencoba 67.{ 68. jika (sambungan!= null) 69.{ 70. samb.close(); 71. } 72. } tangkapan (SQLException ex) 73.{ 74. ex.printStackTrace(); 75. } 76. } 77. } 78. 79. //Dapatkan string waktu saat ini dan kembalikan dalam format yyyyMMddHHmmss, seperti 20050505010101 80. String statis pribadi getCurrDatetimeStr() 81.{ 82. Formulir SimpleDate di sdf = formulir SimpleDate baru di("yyyyMMddHHmmss"); 83. mengembalikan formulir sdf.di(Tanggal baru()); 84. } 85. } |
Metode valueBound() menyisipkan log login ke dalam tabel T_LOGIN_LOG, dan memperbarui waktu keluar tabel log dalam metode valueUnbound() Selain itu, baris 80 hingga 84 menyediakan metode getCurrDatetimeStr() untuk mendapatkan string waktu saat ini. Metode ini digunakan untuk mendapatkan login dan string Waktu dari titik waktu keluar.
Berikut ini penjelasan bagaimana program mencatat waktu login dan logout pengguna dengan menjelaskan langkah-langkah yang dilalui pengguna hingga mereka logout:
1. Setelah pengguna memasukkan kata sandi untuk login melalui login.jsp, program beralih ke halaman kontrol switch.jsp.
2. Di switch.jsp, kami mengikat objek userBean dari kelas User.java ke sesi melalui metode session.setAttribute("ses_userBean", userBean) .
3. Pada saat ini, metode antarmuka HttpSessionBindingListener valueBound() dari objek userBean dipanggil dan log login dimasukkan ke dalam tabel T_LOGIN_LOG.
4. switch.jsp beralih ke halaman Welcome.jsp.
5. Ketika pengguna mengklik link di halaman Welcome.jsp untuk keluar dari sistem, dia diarahkan ke halaman quit.jsp.
6. quit.jsp memanggil metode session.invalidate(), dan objek userBean dihapus dari sesi.
7. Pada saat ini, metode valueUnbound() dari metode antarmuka HttpSessionBindingListener dari objek userBean dipanggil, waktu keluar log diperbarui, dan jendela browser ditutup.
Antarmuka HttpSessionBindingListener adalah antarmuka peristiwa dari penampung Web. Kelas yang mengimplementasikan antarmuka secara otomatis dipanggil ketika suatu peristiwa terjadi. Penampung Web memiliki beberapa antarmuka peristiwa seperti itu.
·Antarmuka ServletContextListener: antarmuka pemrosesan acara untuk startup dan penghancuran kontainer web. Dua metode didefinisikan dalam antarmuka.
·Antarmuka ServletContextAttributeListener: antarmuka pemrosesan acara ketika atribut konteks Web berubah.
· Antarmuka HttpSessionListener: antarmuka pemrosesan acara untuk acara pembuatan dan penghancuran Sesi.
· Antarmuka HttpSessionAttributeListener: Antarmuka pemrosesan peristiwa untuk perubahan objek atribut dalam sesi Sesi. Antarmuka ini mirip dengan antarmuka HttpSessionBindingListener yang kami gunakan sebelumnya.
Selain itu, dua antarmuka pemrosesan acara lainnya disediakan di J2EE1.4, yaitu:
·Antarmuka ServletRequestListener: Permintaan permintaan objek pembuatan dan penghancuran antarmuka pemrosesan acara.
·Antarmuka ServletRequestAttributeListener: antarmuka pemrosesan acara saat mengubah objek atribut dalam Permintaan.
Penyebaran program
Setelah pengembangan program Web selesai, kami mulai mengerjakan penerapan program. Kami berharap dapat menyebarkan aplikasi Web ini ke server aplikasi Web Tomcat5.0.
Pertama, kami menetapkan beranda default aplikasi Web, dan kemudian mengemas seluruh program Web ke dalam file arsip WAR.
1. Atur halaman akses default, klik dua kali node webModule di panel proyek, JBuilder menampilkan halaman berikut di panel konten:
Gambar 26 Mengatur halaman default yang diakses oleh program web
Klik tombol Tambah... di sisi kanan daftar File Selamat Datang, masukkan login.jsp di kotak dialog pop-up dan tekan tombol OK untuk mengatur halaman login.jsp sebagai halaman default penerapan tebal berikut akan ditambahkan ke informasi deskripsi penerapan web.xml:
Daftar Kode 19 Halaman default aplikasi web
1.…
2. <aplikasi web>
3. <nama-tampilan>webModule</nama-tampilan>
4. <daftar file selamat datang>
5. <file selamat datang>login.jsp</file selamat datang>
6. </daftar-file-selamat datang>
7.…
8. </aplikasi web>
Ketika pengguna tidak menentukan nama file akses tertentu di URL, penampung web secara otomatis memeriksa apakah ada file login.jsp di bawah URI, dan jika demikian, langsung memanggil file ini.
2. Klik kanan node webModule di pohon sumber daya di panel proyek, Properties...->Build->Di panel pengaturan Build, atur Build Web archive ke opsi Saat membangun proyek atau modul, seperti yang ditunjukkan pada gambar berikut:
Gambar 27 Mengatur file arsip WAR yang akan dibuat saat Membangun kembali proyek atau modul Web
3. Klik kanan chapter13.jpx di panel proyek dan pilih Rebuild di menu pop-up untuk mengkompilasi keseluruhan proyek.
4. Setelah kompilasi selesai, file webModule.war akan dibuat di direktori root proyek.
5. Salin file webModule.war ke direktori <JBuilder2005 instalasi>/thirdparty/jakarta-Tomcat-5.0.27/webapps.
Ini menyelesaikan penerapan aplikasi web. Selanjutnya kita memulai server aplikasi web Tomcat 5.0 dan mengakses aplikasi webModule.war yang baru saja diterapkan.
1. Klik dua kali startup.bat di bawah <direktori instalasi JBuilder2005>/thirdparty/jakarta-tomcat-5.0.27/bin untuk memulai server aplikasi Web Tomcat 5.0 (pastikan tidak ada aplikasi Web yang berjalan di JBuilder saat ini untuk menghindari konflik) .
2. Buka IE, ketik http://localhost:8080/webModule, dan Anda akan mengakses aplikasi web yang baru saja diterapkan dengan benar, seperti yang ditunjukkan pada gambar berikut:
Gambar 28 Efek akses login.jsp setelah penerapan
Server Tomcat bekerja pada port 8080 secara default, jadi Anda perlu menambahkan nomor port setelah nama mesin. Anda dapat mengubah nomor port ini dengan mengubah file konfigurasi server.xml Tomca yang terletak di direktori conf.
Karena file WAR aplikasi web kita bernama webModule.war, setelah server web dimulai, file WAR akan otomatis didekompresi ke direktori webModule, sehingga harus diakses melalui http://localhost:8080/webModule . Selain itu, karena halaman akses default adalah login.jsp, ketika tidak ada halaman tertentu yang ditentukan, halaman login.jsp akan dipanggil.