وصف عام
قبل بضعة أيام ، فكرت بطريق الخطأ في هذه المشكلة وشعرت أنها عملية للغاية وكان من الضروري حلها. لا يبدو من الصعب كتابة وضع بسيط بشكل عرضي. من السهل في الواقع تصويب الفكرة.
من أجل إدراك أنه لا يمكن للمستخدمين تسجيل الدخول في نفس الوقت ، فقط فكر في Sina و Baidu ، إلخ. في الواقع ، فقط قم بتسجيل الدخول إلى مكان واحد و "الضغط" في المكان الآخر ، ويمكنك معرفة ما هي نتيجة التنفيذ. ثم عكسها ويمكنك تشكيل فكرة أوضح. دعنا نناقشها معًا.
بادئ ذي بدء ، يجب أن نفهم ما يستخدمه المستخدمون لتسجيل الدخول لتسجيل الدخول ، أي مبدأ المستخدمين عبر الإنترنت. هذا هو مجرد تخزين كائن المستخدم في الجلسة ، ثم تسميته في الإطار ، ويمكن الرجوع إلى صفحات محددة أخرى مباشرة. ثم تتمثل وظيفة "الضغط لأسفل" في جعل الجلسة التي تم إنشاؤها حديثًا فعالة وجعل الجلسة المخزنة في الأصل في المستخدم غير صالحة. في هذه المرحلة ، تم إنشاء الفكرة العامة. فكيف تحقيق ذلك؟
إذا كنت تريد معرفة كيفية تنفيذها ، فيجب عليك فهم عملية تخزين كائنات المستخدم في الجلسة. بعد تسجيل الدخول إلى المستخدم ، يمكننا الحصول على مستخدم كائن المستخدم ، و session.setAttribute(key,value); نقوم بتخزين معرف المستخدم أو معرف فريد آخر كمفتاح وحفظ كائن المستخدم كقيمة. بهذه الطريقة ، يمكنك الاتصال بالمستخدم الوحيد في أي وقت وفي أي مكان. تم حل مشكلة تخزين المستخدم ، ماذا عن مشكلة إلغاء الجلسة عند تسجيل الدخول؟
هذا في الواقع ليس صعبا. يمكن أن يكون لدينا المزيد من خصائص الجلسة ، تمامًا مثل استخدام الخريطة لتخزين هوية المستخدم كمفتاح ، وحفظ الجلسة المقابلة كقيمة. ثم عندما يقوم المستخدم بتسجيل الدخول مرارًا وتكرارًا ، تحتاج فقط إلى إخراج الجلسة المقابلة وإبطالها.
في هذه المرحلة ، كانت فكرة التنفيذ واضحة. بعد فترة طويلة ، كل شخص نفاد صبره في قراءة الكود ، أليس كذلك؟ ها هو الرمز:
ما قبل الإعداد ، واجهة JSP
الواجهة بسيطة ، مجرد واجهة تسجيل دخول بسيطة
<form action = "<٪ = request.getContextPath () ٪>/userwxpservlet" method = "post"> username š <input type = "text" name = "username"/> <ber/> password š <inputy type = "text" name = "password"/> <ber/> <input type = "prisal"
القفز إلى الصفحة بعد النجاح
مرحبًا بك: ${sessionScope.user.username}登陆!<br/>
لم أكتب صفحة فاشلة ، يمكنك كتابتها بنفسك ، ولا يوجد ما تقوله عن الصفحة الفاشلة.
تنفيذ الكيان وتسجيل الدخول
جافابان المستخدم
اسم المستخدم الخاص بالسلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ user user () {} المستخدم العام (مستخدم سلسلة ، كلمة مرور السلسلة) {super () ؛ this.username = المستخدم ؛ this.password = كلمة المرور ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ }قم بتسجيل الدخول إلى طريقة تنفيذ خدمة المستخدم ، لذلك لن أكتب DAO والواجهة هنا ، كل شيء بسيط
المجال المنطقي العام (مستخدم المستخدم) {Properties Pro = New Properties () ؛ inputStream هو = userwxpservlet.class.getClassLoader (). getResourCeasStream ("user_wxp.properties") ؛ كلمة كلمة مرور = فارغة ؛ System.out.println (IS+"--------->"+pro) ؛ if (user == null) {return false ؛ } حاول {pro.load (is) ؛ password = pro.getProperty (user.getUserName ()) ؛ if (user.getPassword ()! = null && user.getPassword (). يساوي (كلمة المرور)) {system.out.println ("تسجيل الدخول بنجاح") ؛ العودة صحيح. }} catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {if (is! = null) {try {is.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} إرجاع خطأ ؛ }إرجاع صحيح إذا كان تسجيل الدخول ناجحًا ، وكاذب إذا فشل.
Servlet وفئات الأدوات المنطقية المقابلة
الرمز التالي هو الرمز الحقيقي لتشغيل المستخدم
لقد حددت فئتين هنا ، فئة أدوات واحدة وفئة معالجة Servlet الأساسية واحدة
تتم إضافة بعض العناصر الشائعة إلى فئة الأدوات ، مثل الكود التالي:
/*** يقوم كل مستخدم بتخزين جلسة. من السهل العمل بجميع أنواع الطرق! ! ! */ الخريطة الثابتة العامة <string ، httpsession> mapsession = new hashmap <string ، httpsession> () ؛ رمز خروج المستخدم (يجب أن يطير لإلغاء الجلسة أو إزالة كائن المستخدم المقابل): [Java] عرض UserLogout copypublic static void (اسم المستخدم السلسلة) {if (mapsession.get (اسم المستخدم)! = NULL) // قم بإزالة المستخدم في الخريطة <اسم المستخدم ، الجلسة>. تذكر الخروج من المستخدم ، يجب عليك إلغاء الجلسة أو إزالة خرائط المستخدم. Remove (اسم المستخدم) ؛ // احصل على مجموعة سمات تعداد الجلسة e = session.getAttributenames () ؛ // حذف جميع السمات بينما (e.hasmoreElements ()) {String SessionName = (String) E.NextElement () ؛ Session.RemoVeatTribute (sessionName) ؛ } // إلغاء الجلسة. invalidate () ؛ }}رمز servlet كما يلي:
DOGED VOID DOGED (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {String username = request.getParameter ("اسم المستخدم") ؛ سلسلة كلمة مرور = request.getParameter ("كلمة المرور") ؛ مستخدم المستخدم = مستخدم جديد (اسم المستخدم ، كلمة المرور) ؛ UserService userService = New UsperService () ؛ جلسة httpsession = request.getSession () ؛ if (userservice.dologin (user)) {// بعد تسجيل الدخول ، أدخل المستخدم في الجلسة session.setattribute ("المستخدم" ، المستخدم) ؛ if (CheAcksession (اسم المستخدم)) {// إذا كانت الجلسة موجودة بالفعل قبل ذلك ، فقم بالخروج من المستخدم dbutil.userlogout (اسم المستخدم) ؛ } // تخزين الجلسة الجديدة في الخريطة <المستخدم ، الجلسة> dbutil.mapsession.put (اسم المستخدم ، الجلسة) ؛ // بعد نجاح العملية ، القفز ، من الأفضل إعادة توجيه هنا لإعلام الآخرين أن تسجيل الدخول كان ناجحًا. getRequestDispatcher ("تسجيل الدخول"). يعود ؛ } // تخطي صفحة الفشل هنا. إذا كان القراء مهتمين ، فيمكنهم إضافته بنفسك}مدونة الفحص (اسم المستخدم) كما يلي:
/** * تحقق مما إذا كانت هذه الجلسة موجودة بالفعل * param username * return true: إنها موجودة بالفعل ، يجب حذفها! خطأ: غير حاضر */ private boolean checksession (اسم مستخدم السلسلة) {httpsession session = dbutil.mapsession.get (اسم المستخدم) ؛ if (الجلسة! = null) {return true ؛ } إرجاع خطأ ؛ }أخيرًا ، قم بإرفاق تكوين XML الخاص بـ Servlet
<vishlet> <specorded> للاختبار ، لا يمكن للمستخدمين تسجيل الدخول مرارًا وتكرارًا </description> <name-name> userwxpservlet </isplay-name> <stervlet-name> userwxpservlet </servlet-name> <cervlet-class> com.fingard.ribbit.wxp_test.servlet.userwxpservlet <Servlet-Name> userwxpservlet </revlet-name> <Url-pattern>/userwxpservlet </url-pattern> </servlet mapping>
ما سبق هو وظيفة Java التي قدمها لك المحرر لتنفيذ وظيفة تسجيل الدخول غير المتكررة للمستخدمين. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!