Session ها در Servlet
در سری مقالات آموزش Java Enterprise, به مبحث Session ها در Servlet ها میپردازیم.
همانطور که در مقاله های قبلی مشاهده کردید ما از دو object مربوط به کلاس Request و Response که بسیار حائز اهمیت هستند استفاده میکنیم. همچنین یک object مهم تر نیز وجود دارد و آن object مربوط به Servlet میباشد. سوالی که در اینجا مطرح میگردد این است که این object ها چه زمانی ساخته میشوند و از بین میروند. پیش از پاسخ به این سوال باید این نکته را بدانیم که ساخت این object ها بر عهده Tomcat میباشد.
همانطور که از قبل گفته شد Application ما بر روی Tomcat Container اجرا میشود در نتیجه Servlet نیز بر روی Tomcat Container اجرا میگردد و میتوان گفت که initialize و ایجاد object ها را مدیریت میکند. در مقاله های قبلی شیوه ارسال Request از سمت Client و همچنین شیوه Response از طرف Servlet را بررسی کردیم. حال فرض کنید که بجای یک Client, دو Client به یک URL درخواست بدهند. نتیجه این است که Tomcat اقدام به ساخت object های جدیدی از Request و Response میکند. اگر Client اول مجددا درخواست ارسال کند, ُTomcat باز هم object های جدید میسازد.
بنابراین هربار که Request ارسال میگردد object ها ایجاد میشوند و میتوان آنها را Per Access دانست. اما با object مربوط به Servlet چگونه برخورد میکند ؟ این Object بر خلاف object های مربوط به Request و Response به صورت Per Access نمیباشد. در حقیقت اتفاقی که برای Servlet ها میافتد این است که به ازای هر Request یک Instance جدید ایجاد نمیگردد بلکه یک Thread جدید ساخته میشود. بنابراین Request ها در Thread های مفتاوت از هم قرار دارند نه در instance های مفاوت از یکدیگر.
مزیت این ویژگی را میتوان استفاده کمتر از resource ها دانست و همانطور که در مقالات قبلی گفته شد این ویژگی یکی از مزیت های Servlet به CGI میباشد.
Object مربوط به Request چون با استفاده از یک Stateless Protocol که همان HTTP میباشد ارسال میگردد, قابلیت استفاده مجدد را ندارد. Stateless به این معنا میباشد نمیتوان انتظار داشت data ها را نگهداری کند و بخاطر بسپارد. برای مثال یک Request ارسال میکنیم و در آن پارامتر هایی قرار میدهیم. اما وقتی Request دیگری ارسال میکنیم Application مقدار data در Request قبلی را ندارد. برای رفع این مشکل از Session ها استفاده میکنیم.
فرض کنید که یک صفحه ورود داریم و نمیخواهیم هربار کاربر اطلاعات خودش را وارد کند. بنابراین برای ذخیره اطلاعات کاربر در حافظه Server از Session ها استفاده میکنیم. برای دسترسی به متد Session به این صورت عمل میکنیم :
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter printWriter = response.getWriter(); String username = request.getParameter("username"); HttpSession httpSession = request.getSession(); if (username!=null) httpSession.setAttribute("ssUserName", username); printWriter.println("Request Parameter : " + username); printWriter.println("Session Parameter :" + httpSession.getAttribute("ssUserName")); }
به این ترتیب یک پارامتر به آن ارسال میکنیم و خروجی به صورت زیر میشود :
Request Parameter : vhdrjb Session Parameter :vhdrjb
و اگر Request را بدون پارامتر ورودی ارسال کنیم :
Request Parameter : null Session Parameter :vhdrjb
نتیجه به این صورت خواهد بود. و همانطور که مشاهده کردید مشکل Stateless بودن HTTP را با استفاده از Session ها بر طرف ساختیم. در مقاله بعد به متد های init و service میپردازیم.
سری مقالات آموزش Java Enterprise همچنان ادامه دارد.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
بسیار بسیار سایت خوب و مطالب خوبی دارید ممنون
ممنون از همراهیتون دوست عزیز.