More Related Content Similar to الدرس التاسع (7) More from Anas Aloklah (11) الدرس التاسع1. الر هللا بسمحالرحيم من
الجلسات عن الدرس الٌوم(Session)
هو الدرس بهذا سنأخذه ما:
ًه ماالجلسات(Session)
استخدام وراء الحاجةSession
مع التعامل كٌفٌةSession
الصف طرقHttpSession
الكوكٌز بٌن الفرق(Cookie)والجلسات(Session)
المستعر جلسات بٌن الفرقًالكوك أو ض(Session Cookie)السٌرفر جلسات و(Session)
ًتوضٌح مثالالجلسات عن
الجلسات استخدام عن مثال(Session)التسوق عربة ًف
التدرٌب أجل من واجبات
الجلسات هي ما(Session):
الـSessionذا ًف به ٌحتفظ هو ولكن وقٌمة اسم ٌحمل فهو ًالكوك ٌشبه شًء عن عبارة ًهالسٌرفر كرة
الـ وٌربطSessionعبر العمٌل بجهازIDالـ وعمرSessionالمستعرض فاتح مازلت أنك طالما هو
استخدام وراء الحاجةSession:
لـSessionاستخدمها جاء لكن كثٌر استخداماتالصعبات بعض ظهور بعدالبٌانات حفظ ًفداخل تنقلك أثناء
فعلى موقعكان لو المثال سبٌلقبل بشرابه قمت ما حفظ للسٌرفر ٌمكن فكٌف اإلنترنت على تسوق موقع لدٌنا
بروتوكول إمكانٌات إلى نظرنا لو ولكن بسٌط األمر تجد قد المشترٌات الفاتورة ودفع الموقع من خروجك
HTTPلذا معقد األمر ستجدأجل من اقتراحات عدة جاءتالمشكلة هذه حل:1-ٌالكوك طرٌق عنز,2-عن
طالرابط ًف القٌم وضع رٌق,3-الـ تاغ طرٌق عنhtmlنموذج(form)ًالمخف(hidden.)ممكن ذكرناه وما
الجلسات مبدأ ٌحل أن.
الكوكيز
الـ تخزٌن أجل من الكوكٌز استخدام ٌمكنكIDالحق اتصال كل مع ًاإللكترون التسوق جلسة ًف,وٌمكنك
الـ عن البحثIDوتستخدم الحالٌة للجلسةالـIDالمعلوما استخراج أجل منجهاز على البحث جدول من ت
الخادم.جدولٌن الحقٌقة ًف فهناك:الـ معرفات ٌحمل جدول األولIDالمستخدمٌن جدول مع المرتبط,وجدول
بالمستخدمٌن الخاصة البٌانات تخزٌن أجل من المخصص المستخدمٌن.
السر باستخدام ما طلب أخذ أردنا لو المثال سبٌل علىفلت:
String sessionID = makeUniqueString();
HashMap sessionInfo = new HashMap();
HashMap globalTable = findTableStoringSessions();
globalTable.put(sessionID, sessionInfo);
Cookie sessionCookie = new Cookie("JSESSIONID", sessionID);
sessionCookie.setPath("/");
response.addCookie(sessionCookie);
التجزبة جدول باستخدام المخدم بطلب بعد فٌما تقوم أنت(hash table)globalTableٌجدول لربطهالتجزبة
(hash table)sessionInfoالـ بواسطةIDتصل وهكذا العمٌل إلى بإرساله قمت الذي ًالكوك خالل من
المح بالعمٌل الخاصة للبٌاناتدد.
الكوكٌز استخدامالطرٌقة هذه ًفالحل هوو الممتازالنهج هواستخداما األكثرمع للتعاملالجلسات(Session).
,ذلك ومعالجمٌل فمنأنتطبٌق لها ٌكونسٌرفلٌتأجل من ًعال مستوى علىأنكل ٌعالجهذاالمهام
إلى باإلضافةالتالٌة المهامالشكل بهذا تطبٌقها الصغب:
2. االـ قٌمة حمل الذي ًالكوك ستخراجIDالعمٌل جهاز على الموجودة الكوكٌز جمٌع ضمن من
انتهت ًالت الجلسات تحدٌد
التجزبة جدول ربط(hash table)الطلبات كل مع
تولدIDفرٌدمعه الجلسة فتح أجل من للعمٌل إعطابه أجل من
مالحظة:التجزبة جدول هو ما(hash table)
جدولالتجزأو بةًف أما الخانة رقم هو العنصر دلٌل المصفوفة ولكن بالمصفوفة أشبه هو التقطٌع جدول
فرٌد أسم له ٌكون دلٌل فكل محرفٌة سلسلة ٌكون هو مفتاح عن عبارة وهو عنصر كل دلٌل فأن التقطٌع الجدول
وسوف األخرى الخانة عنأعرضبٌنهما االختالف لتوضٌح مثال.
عادٌة مصفوفة
0 1 2 3 4
التقطٌع جدول
Anas key anything anyKey 12ab
الخانة مفتاح ٌسمى االسم هذا رقمها ولٌس الخانة اسم عبر خانة أي إلى الوصول تستطٌع التقطٌع جدول إذا
الرابط صياغة إعادة(URL)
ف المعلومات بعض إلحاق تستطٌع الطرٌقة بهذهالعنوان نهاٌة ً(URL)المعلومات بعض وضع وتستطٌع
المعرف مع الخادم وربط بالجلسة الخاصة(ID)الشكل مع المثال سبٌل فعلى بالمستخدم الخاص
http://host/path/file.html;jsessionid=a1234بالرا مرفق الجلسة معرفوهو بطjsessionid=a1234,القيمة أن
a1234بالمستخدمٌن المرتبط البٌانات جدول أجل من فرٌد معرف.هذااألسلوبدور للعب ما ًانوع جٌد
الجلسة,ٌدعم ال المتصفح كان إذا مٌزة ولدٌهالمستخدم كان إذا أو الكوكٌزقامجهازه على الكوكٌز بتعطٌل.
األسلوب هذا المقابل ًف ولكنلبها القٌام صعب المعالجة عملٌة أن أي الكوكٌز ًف كان كما عٌب دٌه.
كل مع جدا حذر تكون أن ٌجب أنك إلى ذكرنها ًالت األمور معالجة ًف المستوى ًعال تطبٌق وجود مع حتى
بك الخاص الموقع إلى ٌشر رابطالمستخدم إلى ترسله سوف الذي.
المخفية النماذج حقول
حقول نستخدم سوف هناًف المخفٌة النماذجHTMLًٌل كما ٌكون وذلك بالجلسة تتعلق ًالت قٌم لوضع:
<INPUT TYPE="HIDDEN" NAME="session" VALUE="a1234">
كبٌرا مساوئ األسلوب لهذا ولكن بالجلسة تتعلق ًالت القٌم وضع ًف المخفٌة الحقول نستخدم فأننا نكرنا كمت
من حٌوي بشكل الصفحة أنشاء علٌك ًهنم كل أجلًمخف وذجًتشعب رابط على بالضغط قمت إذا و
(<A HREF...>..</a>)الق فإنتضٌع وسوف تخزن لن النماذج ًف ٌم.د األسلوب لهذا ًف نرى ال لذالكاعم
الجلسات أجل من قوي(session tracking.)
السرفلت في الجلسات
توف السرفلتالجلسات أجل من مستحق حل لك ر(session-tracking)هو:التطبٌقHttpSession.
من أعلى المستوى عالٌة واجها بناء تم التطبٌق هذا ًفالرابط صٌغة إعادة و الكوكٌز فكرة(URL.)كل ًاٌوحال
الجلسات طلب تدعم المخدمات.
مع التعامل كيفيةSession:
مو اآلن ًأعط وسوف أساسٌة خطوات أربع وٌشمل وصرٌح وضح السرفلت ًف الجلسات استخدامعنها جز
بالتفصٌل واحد كل أشرح سوف وبعدها:
1-استدعاء أجل منغرضالـSessionًالتال بطرٌقة ٌتم:
HttpSession session = request.getSession();
2-من قٌم استدعاء أجل منSession:
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
الطرٌقة تعٌدgetAttributeنمط من قٌمةObjectترٌده أنت الذي النمط إلى قصرها وٌتم
3-الـ ًف قٌمة وضع أجل منSession:
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
الـ ًف توضع ًالت القٌمة ًاأٌضSessionبسٌط نمط ولٌس غرض ُاأٌض
3. 4-من قٌم إزالة أجل منالـSession:
من قٌم إزالة أجل من طرق ثالث هناكالـSession
الغرض فأن ذكرنا كماsessionالصف منHttpSessionتقطٌع جدول هو(hash table.)
بالتفصٌل واحدة كل إلى ًتأت اآلن.
استدعاءغرضالـSession
الكابنSessionالنمط من هوHttpSession,ج عن عبارة هو األساس ًف لكنهتقطٌع دول(hash table)
عنه سابقة مالحظة ًف ذكرنها ولقد.من كابن على الحصول أجل منHttpSessionباستدعاء ٌتم فذالك
الطرٌقةgetSessionمنHttpServletRequestًٌل كما ٌتم ولذك:
HttpSession session = request.getSession();
الـ استخراج ًف ٌحصل ما الحقٌقة ًفIDالخاًف مرفقة معلومات أو ًكوك طرٌق عن أما ٌتم بالمستخدم ص
العنوان(URL),الـ ٌستخدم ثمIDالصف ًف األغراض جدول ًف كمفتاحHttpSessionإنشاءه تم الذي
ًامسبق,للم بالنسبة شفاف بشكل ٌجري هذا كل ولكنبرمج:لطرٌقة استدعابك بمجرد فأنتgetSessionلم إذا
ال على العثور ٌتمـIDالعنوان مع مرفق وال ًالكوك ملف ًف بالجلسة الخاص(URL)جلسة ٌخلق النظام فأن
فارغة جدٌدة,العمٌل جهاز ًف ًالكوك استخدام ٌتم كان وإذا(ًأفتراض الوضع هذا)بإنشاء ٌقوم النظام فأن
اسمه ًكوكJSESSIONIDًه وقٌمتهIDبالجلسة خاصة فرٌدة قٌمة ًوه.ب نجد سبق مما إذاممكن أن
بالطرٌقة الجلسة االستدعاء عملٌة تتاثر أن الممكنrequest.getSession()عملٌة فأن هذا على وبناء
الـ ًف قٌم أي وضع ٌمكن عندما تحصل االستدعاءHTTP response headersأر قبل وذلكمحتوى أي سال
للعمٌل للوثٌقة.
الن بغض الجلسة ًف بٌانات تضع أن ترٌد كنت إذا اآلنال أما السابق ًف بٌانات تحتوي الجلسة كان إذا ظر
ًاألت بالشكل استدعاء فعلٌك بٌانات أي على تحوي:request.getSession(true)نفس تكافا ًوه
االستدعاءrequest.getSession()أنها على القٌم ٌأخذ ًاٌإفتراض إذاtrueألنه مناسب االستدعاء هذا
لم إذا جدٌدة جلسة ٌنشا سوفبالفعل موجودة جلسة هناك ٌكون.الجلسة محتوى طباعة فقط ترٌد كنت حال ًف
ًالتال باستدعاء تقوم فهناrequest.getSession(false)ًف جدٌدة جلسة إنشاء إلى بحاجة لست أنت هنا
القٌم بوضع قمت أنت إذا قٌم هناك تكن لم حالtrueتقوم فأنت االستدعاء ًفل عملٌات ًف االسراف ًفٌس
تسوق لعربة المشترٌات قابمة عرض ًف المثال سبٌل على ٌفٌدنا االستدعاء ًف االسلوب هذا ًداع أي لدٌها
ذالك على بسٌط مثال نعرض واآلن إلكترونٌة:
HttpSession session = request.getSession(false);
if (session == null) {
// بطباعة قمرسالةال عربة ًف شًء ٌوجد ال أنهتسوق
} else {
//المشترٌات قابمة بطباعة قم
}
مالحظة:استدعاء علٌكrequest.getSessionقبلإرسالللعمٌل للوثٌقة محتوى أي
من قيم استدعاءSession
لصف التابعة األغراض أنHttpSessionأنما الشبكة عبر وتعود تذهب ال فٌه السٌرفر على تعم تكون
بشكل مرتبطة الحقٌقة ًف ًهًف مرفقة معلومات أو ًالكوك طرٌق عن العمالء مع ًاٌتلقاب
العنوان(URL)تقطٌع جدول عن عبارة ًه الجلسة بنٌة وأن أسلفنا وكما(hash table).أجل ومن
الطرٌقة بواسطة الجلسة ًف سابقا موجودة قٌمة على الحصولsession.getAttribute("key")وتعٌد
نمط من قٌمة الطرٌقة هذا لناObject,قصر علٌك لذالكعلٌه كان الذي النمط إلى النمط.وٌعٌدnull
عن تبحث الذي للمفتاح قٌمة ٌوجد ال أو الجلسة ًف موجود عنه تبحث الذي المفتاح ٌكن لم حال ًف
قٌمته,بها المرجعة القٌم كان إذا فٌما التحقق علٌك لذالكnullال أو.المثال سبٌل وفعال:
HttpSession session = request.getSession();
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
if (value == null) { // No such object already in session
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
}
doSomethingWith(value);
ًالت المفاتٌح كل على الحصول أردت حال ًف ولكن عنها البحث ترٌد ًالت القٌم تعرف أنت الحاالت معظم ًف
باستدعاء فقم الجلسة ًفgetAttributeNamesنمط من غرض لنا تعٌد ًوالتEnumeration.
4. الـ في قيمة وضعSession
فعلٌك قٌم على الحصول أجل فمن السابق ًف تحدثنا كماالطرٌقة استخدام getAttribute وضع أجل ومن
الطرٌقة استخدم الجلسة ًف قٌمةsetAttribute للجلسة قيمة اضافة عن مثال أعرض سوف
HttpSession session = request.getSession();
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
if (value == null) { // No such object already in session
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
}
doSomethingWith(value);
بسٌطة قٌمة ولٌست غرض ًه القٌم تكون أن وٌجب
قيم إزالةالـSession
الجلسة من قٌم إزالة أجل من طرق ثالث هناك ذكرنا كما
1-إلبننااه قمت الذ السرفلت في فقط قيمة زالةباستدعاء فعلٌكremoveAttribute("key")
الجلسة ًف قٌمته مع المفتاح بإزالة تقوم هنا.ًالواستعما ًاشٌوع األكثر األسلوب وهذا.
2-الجلسة قيم كل إلزالة(الوي تطبيق ضمنبالحالي)الطرٌقة باستدعاء قمinvalidateلمسح
بأكمل الجلسةفقط لٌس الجلسة البٌانات جمٌع مسح على ٌقوم سوف ألجراء هذا أن تعرف أن علٌك ها
صفحة أو السرفلت علىjspوالصفحات السرفلتات كل ًف الجلسة بٌانات جمٌع مسج على سٌقوم أنما
jspالتطبٌق هذا ضمن.
ب الخاصة البيانات جميع ومسح للمستخدم خروج تسجيلباستدعاء قم هذا أجل منالطرٌقةlogoutوهذه
تدعم ًالت السرفرات من مدعومة الطرٌقةإصدار2.4و للسرفلت2.2الـ لصفحاتjspتأثر ال الطرٌقة هذه
األخرى السرفلتات على.
طرقالصفHttpSession:
أعرض سوف اآلنملخصلالطرقة كلالموجودةالصف ًفHttpSession
public Object getAttribute(String name)
الجلسة ًف ًامسبق مخزنة قٌمة لك تخرج الطرٌقة هذهشكل علىObjectلك وتعٌدnullوجود عدم حال ًف
عنه تبحث الذي المفتاح باالسم القٌمةسبق فٌما عنها تكلمنا ولقد.
public Enumeration getAttributeNames()
و الجلسة ًف المفاتٌح جمٌع أسماء على تحصل الطرٌقة بهذهشكل على لك ٌعٌدهاEnumeration.
public void setAttribute(String name, Object value)
سبق ما ًف عنها تكلمنا وقد الجلسة ًف قٌمة وضع أجل من الطرٌقة هذه
public void removeAttribute(String name)
عنها تكلمنا وقد الجلسة من مفتاحها مع قٌمة إزالة أجل من الطرٌقة هذا.
public void invalidate()
سبق فٌما عنه تكلمنا وقد التطبٌق كل ًف الجلسة قٌم جمٌع مسح على تقوم الطرٌقة هذه.
public void logout()
بالمستخدم الخاصة الجلسة ًف البٌانات جمٌع بمسح وتقوم للمستخدم خروج تسجٌل بعملٌة تقوم الطرٌقة هذه.
public String getId()
ٌالطر هذهالـ لنا ٌعٌد قةIDجلسة كل أجل من ٌولد الذي.
5. public boolean isNew()
تعٌد الطرٌقة هذاtrueلم المستعرض إذاالجلسة ٌرى,الجلسة أنشاء تم ٌكون ما ًةعاد ألنهللتوبدل وذالك
العمٌل من وارد الطلب بواسطة العمٌل إلى الرجوع.لنا وتعٌدfalseالجلسة كانت إذاموجودًامسبق ة.
السرفلت بزٌارة مستخدمٌن قام إذا معرفة ًف الطرٌقة هذه تفٌدناصفحة أوjspعلى ومثال سابقة فترى ًف
ذالكذالك عن ٌعبر الذي الكود:
HttpSession session = request.getSession();
if (session.isNew()) {
// أفعلأيزٌارة أول اجل من شًء
} else {
// شًء أي أفعلالزابر عودة أجل من
}
public long getCreationTime()
هذاثانٌة ًبالملل الوقت تعٌد الطرٌقةمنذاللٌل منتصف,1ًالثان كانون1792(غرٌنتش بتوقٌت)إلىالوقت
الجلس أنشاء فٌه تم الذية.قٌمة على للحصولمفٌدةللطباعةقمبالقٌمة تمرٌرالصف ًبان إلىDateأو
الطرٌقةsetTimeInMillisمنالصفGregorianCalendar.
public long getLastAccessedTime()
اللٌل منتصف منذ ثانٌة ًبالمٌل الوقت لنا تعٌد الطرٌقة هذا1ًالثان كانون1792(غرٌنتش بتوقٌت)الوقت إلى
الجلسة ًف للعمٌل مشاركة أخر.
public int getMaxInactiveInterval()
public void setMaxInactiveInterval(int seconds)
سواء الطرٌقتان هتانsetأوgetأجل منبالثانٌة الوقت طول
والجلسات الكوكيز بين الفرق
حيث من الفرقجلساتالكوكيز
ماهيتتقطٌع جدول عن عبارة هو(hash table)صغٌر ملف عن عبارة هو
الوجود مكانالسٌرفر ذاكرة ًفجهاز علىالمستعرض ذاكرة ًف أو العمٌل
الزمنية المدةالمستعرض تغلق لم أنك طالماكالجلسة ٌعمل أو محدد فترة ضمن ٌعمل
ربط طريقة
بالمستخدم
بالعنوان مرفقة معلومات أو ًكوك بواسطةالطلب هٌدر و االستجابة الهٌدر بواسط
الكوكي أو المستعرض جلسات بين الفرق(Session Cookie)السيرفر جلسات و(Session)
حيث من الفرقالسيرفر جلسةالمستعرض جلسة
ماهيتتقطٌع جدول عن عبارة هو(hash table)ًكوك عن عبارة هو
الجلسة وجود مكانالسٌرفر ذاكرة ًفالمستعرض ذاكرة ًف
الزمنية المدةالمستعرض تغلق لم أنك طالماالمستعرض تغلق لم أنك طالما
6. توضيح مثاليالجلسات عن
السرفلت إلى ٌدخل مرة أو الزابر كان إذا نعرف سوف المثال بهذاال أماالـ فٌه جدول ٌطبعIDألول دخوله
مرة(الجلسة إنشاء لحظة أي)هذا كل ًاطبع السرفلت زٌارة مرات وعدد السرفلت إلى دخول أخر وتارٌخ
الجلسات باستخدام.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
/** Servlet that uses session tracking to keep per-client
* access counts. Also shows other info about the session.
*/
public class ShowSession extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
HttpSession session = request.getSession();
String heading;
Integer accessCount = (Integer) session.getAttribute("accessCount");
if (accessCount == null) {
accessCount = new Integer(0);
heading = "Welcome, Newcomer";
} else {
heading = "Welcome Back";
accessCount = new Integer(accessCount.intValue() + 1);
}
//Integer is an immutable data structure. So, you
//cannot modify the old one in-place. Instead, you
// have to allocate a new one and redo setAttribute.
session.setAttribute("accessCount", accessCount);
PrintWriter out = response.getWriter();
String title = "Session Tracking Example";
String docType ="<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0"+" Transitional//EN">n";
out.println(docType + "<HTML>n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>n" +
"<BODY BGCOLOR="#FDF5E6">n" +
"<CENTER>n" +"<H1>" + heading + "</H1>n" +
"<H2>Information on Your Session:</H2>n" +
"<TABLE BORDER=1>n" +"<TR BGCOLOR="#FFAD00">n" +
" <TH>Info Type<TH>Valuen" +"<TR>n" +" <TD>IDn" +
" <TD>" + session.getId() + "n" +"<TR>n" +" <TD>Creation Timen" +
" <TD>" +new Date(session.getCreationTime()) + "n" +
"<TR>n" +" <TD>Time of Last Accessn" +
" <TD>" +new Date(session.getLastAccessedTime()) + "n" +
"<TR>n" +" <TD>Number of Previous Accessesn" +
" <TD>" + accessCount + "n" +"</TABLE>n" +"</CENTER></BODY></HTML>");
}
}
7. تسوق عربة مثالالجلسات باستخدام
وأجاص وبرتقال تفاح ًه المشترٌات من قوابم ثالث عرض ٌتم بسٌط مثال هذاسوف الذي الشًء على تشر
سرفلت إلى أسالك فٌتم إرسال على تضغط عندما عربة إلى تضٌفهCartبشرابه قمت ما ٌضٌف سوف الذي
سرفلت إلى بإرسالك ٌقوم ثمة ومن الجلسة إلىCart2سوف الذيبشرابه قمت ما ٌعرض.
صفحة لدٌنا إذاhtmlوسرفلتانCartوCart2
صفحةhtml
<HTML>
<HEAD>
<TITLE>Fruits Online</TITLE>
</HEAD>
<BODY bgcolor=#CCffCC>
<CENTER><H1>We have these goodies</H1></CENTER>
<HR>
<FORM ACTION="Cart" METHOD="post">
<TABLE CELLSPACING="5" CELLPADDING="5">
<TR>
<TD ALIGN="center"><B>Add to Cart</B></TD>
<TD ALIGN="center"></TD>
<TD ALIGN="center"></TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_a" VALUE="apple $1"></TD>
<TD ALIGN="left">apple</TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_b" VALUE="orange $2"></TD>
<TD ALIGN="left">orange</TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_c" VALUE="pear $3"></TD>
<TD ALIGN="left">pear</TD>
</TR>
</TABLE>
<HR><BR>
<CENTER>
Press
<INPUT TYPE="Submit" NAME="Cart1_submit" VALUE="Submit">
to submit your order.
</CENTER>
</FORM>
</BODY>
</HTML>
8. السرفلت إلى ًنأت اآلنCartال هذا ومهمتسهو رفلتصفحة من القٌم أخذhtmlبنٌة الجلسة ًف ووضعها
ًٌل كما ستكون الجلسة:
itemCountًف األغراض عددالعربةنمط من وهوInteger
itemsشكل من مصفوفة عن عباة هوVectorوفٌهاأسماء
األشٌاءبشرابها قمت ًالت
هو السرفلت هذا كود
import javax.servlet.*;
//Souce code for Cart servlet invoked when the web form cart.Html is submitted
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Cart extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/* Retreieve the session object or create
a new one. */
HttpSession session = request.getSession(true);
Integer itemCount = (Integer) session.getValue("itemCount");
Vector items = (Vector) session.getValue("items");
/* If no item has been selected so far, set the count to zero and create a vector. */
if (itemCount == null) {
itemCount = new Integer(0);
items = new Vector( );
}
// It is recommended that you obtain the session object prior to writing any output.
PrintWriter out = response.getWriter( );
response.setContentType("text/html");
/* Retrieve form data */
Enumeration keys;
String name, value, prefix;
int count = itemCount.intValue( );
keys = request.getParameterNames();
while (keys.hasMoreElements())
{
name = (String)keys.nextElement();
prefix = name.substring(0,4);
out.println("name=" + name + " prefix=" + prefix);
if (prefix.equals("item"))
{
// add item to list of items
value = request.getParameter(name);
out.println("adding to items:" + value + " count=" + count);
items.add(value);
count++;
}//end if
} //end while
itemCount = new Integer(count);
session.putValue("itemCount", itemCount);
if (items != null)
session.putValue("items", items);
/* Issue a redirect to send the cookies and invoke another servlet to generate a display
of the items in the shopping cart */
response.sendRedirect("http://localhost:8085/sessions/Cart2");
} //end doPost
} //end class
9. السرفلت إذاCartالسرفلت إلى ٌنقلنا الجلسة إلى المشترٌات أدخال بعدCart2بطباعة ٌقوم السرفبت هذا
المشترٌاتوأسعارهاهو السرفلت هذا كود
التدريب اجل من وجبات
بإعادة قمالجلسات فكرة على تعمل أن على اللعبة برمجة
// Servlet to view what is in the shopping cart (as recorded by the use a session object in the Cart servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Cart2 extends HttpServlet
{
/* View items in shopping cart */
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// Retreieve the session object, if any
HttpSession session = req.getSession(false);
Integer itemCount;
Vector items = null;
if (session == null)
{
//no session object has been created
itemCount = new Integer(0);
}
else
{
itemCount = (Integer) session.getValue("itemCount");
items = (Vector) session.getValue("items");
}
// It is recommended that you obtain the session object
// prior to writing any output.
PrintWriter out = res.getWriter( );
res.setContentType("text/html");
out.println("<html>");
out.println("<head><title>Servlet Response" + "</title></head>");
out.println("<body>");
out.println("<body bgcolor="beige">");
out.println ("Contents of your shopping cart " + " using session object<UL>");
int count = itemCount.intValue( );
/* Retrieve the items from the session object*/
for (int i = 0; i < count; i++)
out.println("<LI>" + items.get(i));
out.println("</UL>");
out.println("<HR>");
out.println("</body></html>");
} // end doGet
} // end Cart2