تصف هذه المقالة طريقة تنفيذ وظيفة مراقبة المستخدم عبر الإنترنت استنادًا إلى مستمع Servlet. شاركه للرجوع إليه ، على النحو التالي:
1. التحليل:
للقيام بموقع موقع ويب عبر الإنترنت من الأشخاص ، يمكنك الاستماع من خلال ServletContextListener. عند بدء تشغيل سياق تطبيق الويب ، أضف قائمة في ServletContext. استخدمه لإعداد اسم المستخدم المخزن عبر الإنترنت ، ثم استمع من خلال httpsessionattributeListener. عندما يقوم المستخدم بتسجيل الدخول بنجاح ، قم بتعيين اسم المستخدم على الجلسة. في الوقت نفسه ، يتم وضع طريقة اسم المستخدم في قائمة ServletContext ، وأخيراً تم الاستماع إليها من خلال HTTPsessionListener. عندما يقوم المستخدم بتسجيل الخروج من الجلسة ، يتم حذف اسم المستخدم من القائمة في نطاق سياق التطبيق.
2. أشياء يجب ملاحظتها
أثناء الاختبار ، تحتاج إلى بدء متصفحات مختلفة لتسجيل الدخول إلى مستخدمين مختلفين. فقط من خلال النقر على زر تسجيل الدخول ، يمكنك تقليل المستخدمين عبر الإنترنت. أغلق المتصفح لا يمكن تقليل المستخدمين عبر الإنترنت.
3. رمز مصدر المشروع
(1) كود جافا
onlinelistener فئة
package com.smalle.listener ؛ استيراد java.util.linkedList ؛ استيراد java.util.list ؛ استيراد javax.servlet.servletcontext ؛ استيراد javax.servlet.servletcontextevent javax.servlet.http.httpsessionbindingevent ؛ استيراد javax.servlet.http.httpsessionevent ؛ import javax.servlet.http.httpsessionistener ؛ public onlinelistener يشرف servletContextener ، httpsessionattributistener ، // الطرق التي تعرضها لتراجعات في بداية تطبيق Application Override public void contextinitialized (servletContextevent E) {// تهيئة تطبيق كائن التطبيق = E.GetServletContext () ؛ // قم بتعيين سمة قائمة لحفظ اسم المستخدم عبر الإنترنت this.application.setAttribute ("Online" ، LinkedList جديد <string> ()) ؛ }. if ("username" .equals (e.getName ())) {onlines.add ((string) } // إعادة تعيين خاصية تطبيق العمود للقائمة المضافة. this.application.setAttribute ("Online" ، onlines) ؛ } // الأساليب التي يتم استدعاءها عند تدمير الجلسة Override public void sessiondestroyed (httpsessionevent e) {// الحصول على قائمة اسم المستخدم <string> onlines = (قائمة <string> this.application.getattribute ("عبر الإنترنت") ؛ // احصل على اسم المستخدم الحالي لسلسلة المستخدم = (String) E.GetSession (). getAttribute ("اسم المستخدم") ؛ // حذف هذا المستخدم من القائمة onlines.remove (اسم المستخدم) ؛ // إعادة تعيين القائمة المحذوفة في خاصية التطبيق. this.application.setAttribute ("Online" ، onlines) ؛ } public void sessioncreated (httpsessionevent e) {} public void attributeReMoved (httpsessionbindingevent e) {} public void attributeplaced (httpsessionbindingevent e) {}}فئة Loginservlet
package com.smalle.listener ؛ import java.io.ioException ؛ import java.io.printwriter ؛ import java.util.list ؛ import javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ import javax.servlet.http.htttplet javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ loginservlet الفئة العامة يمتد httpservlet {private static static final serialversionuid = 1l ؛ DOGED VOID Public Void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {this.dopost (request ، response) ؛ } public void dopost (طلب httpservletrequest ، استجابة httpservletponse) يلقي servletexception ، ioException {request.setcharacterencoding ("utf-8") ؛ // قم بتعيين اسم username username = request.getParameter ("اسم المستخدم") ؛ // احصل على اسم المستخدم في معلمة الطلب // إضافة سمات إلى الجلسة ستؤدي إلى تشغيل طريقة AttributeAdded في httpsessionattributeListener if (اسم المستخدم! = null &&! username.equals ("")) {request.getSession (). } // احصل على قائمة اسم المستخدم عبر الإنترنت من قائمة سياق التطبيق <string> Online = (list <string>) getServletContext (). getAttribute ("Online") ؛ System.out.println ("loginservlet" + Online) ؛ استجابة. printWriter out = response.getWriter () ؛ Out.println ("") ؛ Out.println ("<title> قائمة المستخدمين </title>") ؛ Out.println ("") ؛ Out.println ("المستخدم الحالي هو:" + اسم المستخدم) ؛ Out.print ("<hr> <h3> قائمة مستخدم عبر الإنترنت </h3>") ؛ حجم int = عبر الإنترنت == فارغ؟ 0: Online.size () ؛ لـ (int i = 0 ؛ i <size ؛ i ++) {if (i> 0) {out.println ("<br>") ؛ } out.println (i + 1 + "." + online.get (i)) ؛ } // ملاحظة: لإعادة كتابة عنوان URL للارتباط تلقائيًا. out.println (") ؛ out.println (" ") ؛ out.flush () ؛ out.close () ؛}}فئة Logoutservlet
package com.smalle.listener ؛ import java.io.ioException ؛ import java.io.printwriter ؛ import java.util.list ؛ import javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ import javax.servlet.http.htttplet javax.servlet.http.httpservletresponse ؛ الطبقة العامة logoutservlet يمتد httpservlet {public void dogge (httpservletrequest request ، httpservletponse) رمي servletexception ، ioException {this.dopost (طلب ، استجابة) ؛ } public void dopost (طلب httpservletrequest ، استجابة httpservletponse) يلقي servletexception ، ioException {request.setcharacterencoding ("utf-8") ؛ // قم بتعيين نوع محتوى الاستجابة // تدمير الجلسة ، وسيتم تشغيل طريقة SessionDestroyed في SessionLinstener لطلب. // احصل على قائمة اسم المستخدم عبر الإنترنت من قائمة سياق التطبيق <string> Online = (list <string>) getServletContext (). getAttribute ("Online") ؛ استجابة. printWriter out = response.getWriter () ؛ Out.println ("") ؛ Out.println ("<title> قائمة المستخدمين </title>") ؛ Out.println ("") ؛ Out.println ("") ؛ Out.print ("<h3> قائمة المستخدمين عبر الإنترنت </h3>") ؛ حجم int = عبر الإنترنت == فارغ؟ 0: Online.size () ؛ لـ (int i = 0 ؛ i <size ؛ i ++) {if (i> 0) {out.println ("<br>") ؛ } out.println (i + 1 + "." + online.get (i)) ؛ } out.println ("<hr> <a href = '/' index.html/'' 'home </a>") ؛ Out.println ("") ؛ Out.println ("") ؛ out.flush () ؛ out.close () ؛ }}(2) رمز web.xml
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <Splay-name> TestServlet </simplay-name> <Stexer> <Canker-Class> com.smalle.listener.onlinelistener </leader-class> </stanker> <Servlet> <Sradlet-Name> loginservlet </revlet-name> <Servlet-class> <Srevlet-Name> loginservlet </servlet-name> <url-pattern>/logInListener </url-pattern> </servlet mapping> <stervlet> <Servlet-Name> logoutservlet </reserle-name> <Servlet-class> com.smalle <Srevlet-Name> logoutservlet </servlet-name> <url-pattern>/logoutListerener </url-pattern> </servlet-mapping> <-list-file-list> <lispile-file> index.jsp </iship-file> </siff-file-list> </bil-app>
(3) رمز طبقة العرض
<! doctype html> <html> <head> <title> index.html </title> <meta name = "content-type" content = "text/html ؛ charset = utf-8"> </head> <body> <form action = "logInlister" method = "post"> username: value = "login"> <br> <br> </form> </body> </html>
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض المواضيع: "ملخص مهارات برمجة شبكة Java" ، "دروس في هياكل بيانات Java والخوارزميات" و "ملخص لمهارات تشغيل Java" ، "ملخص لمهارات تشغيل Java ومهارات تشغيل" ملخص "من Java Cache" مهارات التشغيل ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.