Cara menggunakan httpsession untuk mengimplementasikan catatan akses QQ di Java, artikel ini mengungkapkan jawaban untuk Anda. Konten spesifiknya adalah sebagai berikut
1. Tulis kelas data ruang QQ (qqs.java)
QQS kelas publik {private static linkedHashMap <integer, string> qqs = new LinkedHashMap <Integer, String> (); static {qqs.put (10001, "Zhang San"); qqs.put (10002, "li si"); qqs.put (10003, "wang wu"); qqs.put (10004, "Zhao liu"); qqs.put (10005, "tian qi"); qqs.put (10006, "jiao ba"); qqs.put (10007, "hou jiu"); qqs.put (10008, "liu shi"); qqs.put (10009, "xiao er"); } public static linkedHashMap <integer, string> getQQS () {return qqs; }}2. Tulis halaman data QQ nyata dan riwayat penelusuran (ListServer.java)
public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// dapatkan objek sesi httpsession session = request.getSession (); // atur respons data Cina.setcharacterencoding ("UTF-8"); response.setContentType ("Teks/html; charset = utf-8"); // dapatkan output stream printwriter out = response.getWriter (); // Dapatkan data QQS LinkedHashMap <Integer, String> qqs = qqs.getqqs (); Atur <map.entry <integer, string >> set = qqs.entryset (); Iterator <map.entry <integer, string >> it = set.iterator (); // Struktur Halaman Output out.println ("<html> <head> <title> qq list </iteme> <tyle> a {margin-right: 20px;} </tyle> </head> <body>"); out.println ("<hr/> <br/>"); out.println ("<h3> qq list </h3>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); // Lingkarkan hyperlink ruang qq sementara (it.hasnext ()) {map.entry <integer, string> entri = it.next (); Integer num = entry.getKey (); String name = entry.getValue (); out.println ("<a href =/"/day08/store? num = "+num+"/">"+name+"</a>"); } // output informasi catatan browsed out.println ("<hr/> <br/>"); out.println ("<h3> qq browsing history </h3>"); out.println ("<hr/> <br/>"); // Dapatkan Access Record Data String History = (String) session.getAttribute ("History"); if (history == null) {out.println ("<font color =/" red/"> Maaf, tidak ada catatan akses saat ini ... </font>"); } else {// loop melalui data catatan yang diakses oleh string pengguna [] nums = history.split (","); untuk (string num: nums) {string name = qqs.getqqs (). get (integer.parseint (num)); out.println (name+","); }} // Tutup struktur halaman out.println ("</body> </html>"); }3. Tulis halaman yang menyimpan ruang penelusuran qq (storeqqservlet.java)
public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// dapatkan objek sesi httpsession session = request.getSession (false); // Dapatkan string parameter permintaan num = request.getParameter ("num"); // Dapatkan data di sesi history = (string) session.getAttribute ("history"); // Tentukan data if (history == null) {// kunjungan pertama session.setAttribute ("history", num); // history = 10001} else {// kunjungi beberapa session.setAttribute ("history", history+","+num); // Atur jumlah num dan urutan string display [] qqs = history.split (","); // Konversi array menjadi koleksi yang nyaman untuk daftar operasi <string> list = arrays.aslist (qqs); // Konversi daftar ke LinkedList untuk memfasilitasi pengoperasian data LinkedList <String> linked_list = new LinkedList <String> (); linked_list.addall (daftar); // Tentukan jumlah qqs yang muncul jika (qqs.length <3) {if (linked_list.contains (num)) {// history = 10002.1003 // if linked_list.remove (num); linked_list.addfirst (num); } else {// history = 1004,10002,1003 // jika linked_list.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// history = 10002,10003,10004 10004 // if linked_list.remove (num); linked_list.addfirst (num); } else {// history = 10005, 10002,10003 // tidak termasuk linked_list.removelast (); linked_list.addfirst (num); }} // Akses catatan dengan waktu dan pesanan yang baik adalah Linked_List StringBuffer SB = New StringBuffer (); untuk (string new_num: linked_list) {sb.append (new_num+","); } String new_history = sb.toString (); session.setAttribute ("History", new_history); } // Redirect ke qq list halaman response.sendredirect ("/day08/list"); }Kode di atas menyimpan riwayat penelusuran pengguna di objek sesi, tetapi objeknya ada di memori server dan memiliki batas waktu yang valid. Jika saatnya tiba, sesi akan dihancurkan.
Waktu default adalah setengah jam (30 menit).
4. Konfigurasikan waktu yang valid dari sesi
Di web.xml dari setiap situs web, Anda dapat mengonfigurasi waktu yang valid dari objek sesi yang dibuat oleh situs web. Perhatikan bahwa unit adalah menit saat mengkonfigurasi.
Thread.slessp (unit milidetik), cookie.setmaxage (unit kedua), sesi (unit menit)
<session-config> <sesi-timeout> 2 </sesi-timeout> unit adalah menit </session-config>
5 Nonaktifkan cookie
Cookie dapat menggunakan klien untuk menyimpan data sesi.
Httpsession dapat menggunakan cookie untuk menyimpan informasi sessionID.
Bahkan, di pengaturan browser, Anda dapat menolak informasi cookie yang dikirim kembali oleh situs web.
Pada saat ini, mengakses kasus di atas akan menyebabkan pengecualian pointer nol terjadi. Jika Anda perlu memperbaiki situs web, Anda harus menggunakan teknologi urlrewriting.
Urlrewriteting
Menganalisis penyebab masalah di atas:
Server telah membuat objek sesi, tetapi karena browser melarang penerimaan cookie, server tidak dapat mengirim nilai ID dari sesi yang dibuat ke browser dalam bentuk header respons set-cookie untuk penyimpanan, sehingga ID sesi tidak akan dikisap selama kunjungan kedua, sehingga sesi tidak dapat ditemukan.
Metode umum
String EncoderedIcturl (String URL) Tambahkan informasi sessionID ke jalur redirect string yang ditentukan EncodeUrl (URL String) Tambahkan informasi sessionid ke alamat URL normal
Prinsip Implementasi:
"Recode semua alamat URL di halaman menggunakan metode di atas"
1 Ubah program di atas
1 ListServlet.java
String path = "/day08/store? Num ="+num; path = response.encodeUrl (path); out.println ("<a href = '"+path+"'>"+name+"</a>");2. StoreqqServlet.java
String path = "/day08/list"; path = response.encoderedirecturl (path); response.sendredirect (path);
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.