جاوا سرولت
سرولت کلاسی از زبان برنامهنویسی جاواست که برای گسترش تواناییها سرورها میزبان برنامههای مدل درخواست-پاسخ است. اگرچه سرولتها میتوانند به نوع درخواستی پاسخ دهند، بیشتر در سرورهای میزبانِ وب مورد استفاده قرار میگیرند. میتوان آن را جاوااپلتی دانست که به جای مرورگر در سرور اجرا میشود. [۱]
یک سرولت کلاسی از جاواست که در جاوای سازمانی مطابق با رابط برنامهنویسی سرولت جاواست، پروتکلی که مسئول پاسخ به درخواست است. آنها تنها به پروتکل مشتری-سرور محدود نمیشود، ولی بیشتر مواقع از پروتکل انتقال ابرمتن استفاده مینماید. بنابراین کلمهی سرولت بیشتر بر اچتیتیپی سرولت دلالت دارد.[۲] توسعهدهندهی نرمافزار از سرولت برای اضافه کردن محتوای پویا به سرور وب با استفاده از سکوی جاوا استفاده مینماید. صفحهی تولید شده عمدتا شامل محتوای اچتیامال است ولی گاهی نیز سایر دادههای مانند اکسامال را نیز شامل میشود. سرولتها، همتای مبتنی بر جاوای فناوریهایی غیر جاوایی مانند سیجیال و صفحههای سرور فعال است. سرولتها میتوانند حالت وضعیت متغیرها را در یک نشست حفظ نمایند. این کار به کمک کوکی اچتیتیپی و موتور بازنویسی انجام میدهند.
محتویات |
[ویرایش] تاریخچه
مشخصات کلی سرولتها توسط سان میکروسیستمز ایجاد و نگارش اولش با شمارهی ۱.۰ در ژوئن ۱۹۹۷(خرداد ۱۳۷۶) نهایی شد. با انتشار نگارش ۲.۳ مشخصات سرورلت تحت فرآیند جمعیت جاوا (ف.ج.ج) قرار گرفت. سند جیاسار ۵۳، محتوی مشخصات «جاوا سرولت ۲.۳» و «صفحات جاوا سرور» است. سند جیاسار ۱۵۴ نیز مشخصات سرولت ۲.۴ و ۲.۵ را در برد دارد. از مارس ۲۰۱۰ (اسفند ۱۳۸۸) نگارش کنونی سرولت با شماره ۳.۰ منتشر شد. در وبلاگ آن بر روی Java.net، کارمند کارآزمودهی سان و مدیر ماهی شیشهای به تشریح تاریخچهی فنآوری سرولت پرداخت. جیمز گاسلینگ فردی بود که در روزهای آغازین جاوا فکر ایجاد آن را میپروراند. ولی مفهوم آن تا زمان ارایه آن به صورت محصول از سوی جاوا عملی نشد. این پیش از عملی شدن جاوای سازمانی بود.
| نگارشایپیال سرولت | تاریخ انتشار | سکو | تغییرات مهم |
|---|---|---|---|
| سرولت ۳.۰ | آذر ۱۳۸۸ | JavaEE 6,JavaSE 6 | قابلیت اتصال، سهولت توسعه، سرولت نامتقارن، امنیت، بارگزاری پرونده |
| سرولت ۲.۵ | شهریور ۱۳۸۵ | JavaEE 5,JavaSE 5 | نیازمند جاوا استاندارد نگارش ۵، قابلیت تفسیر |
| سرولت ۲.۴ | آبان ۱۳۸۲ | J2EE 1.4 , J2SE 1.3 | استفاده از شمای اکسامال در web.xml |
| سرولت ۲.۳ | مرداد ۱۳۸۰ | J2EE 1.3 , J2SE 1.2 | افزودهشدن Filter |
| سرولت ۲.۲ | مرداد ۱۳۷۸ | J2EE 1.2 , J2SE 1.2 | الحاق به نگارش سازمانی، معرفی برنامههای مستقل وب در قالب فایل war. |
| سرولت ۲.۱ | آبان ۱۳۷۷ | نامعلوم | اولین مشخصات رسمی ارایه شد، اضافهشدن RequestDispatcher و ServletContext |
| سرولت ۲.۰ | جیدیکا ۱.۱ | بخشی از کیت توسعهی جاوا سرولت ۲.۰ | |
| سرولت ۱.۰ | خرداد ۱۳۷۹ | نامعلوم |
[ویرایش] برتریها نسبت به سیجیآی
برتریهای استفاده ار سرولت را میتوان در افزایش اجرا و راحتی استفادهی ترکیبی به سیجیآی سنتی است. اسکریپتهای سیجیآیِ سنتی که با زبان جاوا نوشته میشود دارای مشکلاتی در اجراست:
- در هنگام ایجاد درخواست اچتیتیپی، به ازای هر درخواست اسکریپت سیجیآی، فرآیندی ایجاد میشود. این سربار پردازشی ایجاد شده میتواند بر سیستم فشار شدیدی وارد نماید، مخصوصا هنگامی که پردازش کار پردازشی سریعی را ایجاد مینماید. بنابراین ایجاد پردازش از خودِ پردازش بیشتر زمان میبرد. جاوا سرولت این مشکل را حل نموده است، سرولت یک پردازش جداگانه نیست. هر درخواست دریافت شده، توسط یک نخ در فرآیند وبِ موجود بررسی میشود، که موضوع ایجاد فرآیند جداگانه به وسیلهی نسخهبرداری (فورک) توسط شبح اچتیتیپی را بر طرف مینماید.
- درخواستهای همزمان در سیجیآی موجب آن میشود که اسکریپت سیجیآی، به دفعات درخواستی در حافظه بارگذاری شود. در حالیکه با استفاده از سرولتها نیز به ازای هر درخواست یک نخِ جدید تولید میشود.
- تنها یک کلاس که به صورت مشترک مورد استفاده است، در حافظه ایجاد میگردد. این کار باعثِ کاهش استفاده از حافظه و بهبود مدیریت دادهها خواهد شد.
- یک سرولت توسط موتورِ سرولت در محیطِ محدود اجرا میشود که به آن گودال ماسه میگویند. این کار شبیه اجرای اپلت در گودالِ ماسهی مرورگر وب است. این کار باعث کاهش خطرات بالقوه خواهدشد.[۲]
[ویرایش] چرخه زندگی یک سرولت
- کانتِینِر سازندهی بدون آرگومان را صدا میزند
- کانتِینِر وب متد
init()را صدا میزند. این متد سرولت را مقداردهی نموده و باید پیش از آغاز زندگی سرولت فراخوانی شود، متدinit()تنها یکبار فراخوانی میشود. - بعد از مقداردهی، سرولت میتواند به پاسخِ درخواستهای ارسال شده بپردازد. هر درخواست اچتیتیپی در نخِ مخصوص و جداگانهای پاسخ داده میشود. کانتینر وب، متد
service()را به ازای هر درخواست فراخوانی مینماید. متدservice()نوع درخواست دریافت شده را تعیین و آن را به متد مناسبی که وظیفهاش رفع نیازهای آن درخواست است، ارسال مینماید. توسعهدهندهی سرولت باید این متدها را پیادهساز نماید. در صورت عدم پیادهسازی متد یادشده، متدِ والدِ کلاس فراخوانی خواهد شد که معمولا با ارسال یک خطا به درخواست کننده همراه است. - در نهایت، کانتینر وب، متد
destroy()را فراخوانی نموده که سرولت را از دور کار خارج مینماید. متدdestroy()مانند متد مقدار دهی تنها یک بار در چرخهی کاری فراخوانی میشود.
[ویرایش] نمونه
نمونهی زیر عبارت «سلام دنیا» را بر صفحهی وب نمایش میدهد. توجه نمایید که HttpServlet زیر کلاسی از GenericServlet است که از پیادهسازیِ رابط Servlet بدست آمدهاست. متد service() درخواست دریافتی را به متدهای doGet()، doPost()، doPut() ، doDelete() و مانند آنها ارسال مینماید که منطبق با درخواست دریافت شدهباشد.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action=request.getParameter("action"); EmployeeManager eMgr=new EmployeeManager(); if(action==null) { action=""; } else if(action.equals("create")) { Employee emp=eMgr.Populate(request); try { eMgr.create(emp); } catch(SQLException e) { System.out.println("Exception="+e); } finally { RequestDispatcher disp=request.getRequestDispatcher("/jsp/confirmation.jsp"); disp.forward(request,response); } } else if(action.equals("view")) { ArrayList<Employee> empList=new ArrayList<Employee>(); try { empList=eMgr.view(); } catch(SQLException e) { e.printStackTrace(); } request.setAttribute("empList1",empList); RequestDispatcher disp=request.getRequestDispatcher("/jsp/view.jsp"); disp.forward(request, response); } else if(action.equals("Update")) { String empId = null; empId = request.getParameter("empRadio"); Employee empRecord = new Employee(); if(empId==null) { empId = " "; } System.out.println(empId); try { empRecord = eMgr.empRecord(empId); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("empRecord",empRecord); RequestDispatcher disp = request.getRequestDispatcher("/jsp/update.jsp"); disp.forward(request, response); } else if(action.equals("updateAddress")) { String newContactNo=null; String newAddress=null; String empId=null; newAddress = request.getParameter("newAddress"); newContactNo = request.getParameter("newContactNo"); empId=request.getParameter("empId"); try { eMgr.updateAddress(empId,newAddress,newContactNo); } catch (SQLException e) { e.printStackTrace(); } RequestDispatcher disp = request.getRequestDispatcher("/EmployeeController?action=view"); disp.forward(request, response); } else if(action.equals("Delete")) { String empId=null; empId=request.getParameter("empRadio"); int flag=0; try { flag = eMgr.delete(empId); } catch (SQLException e) { e.printStackTrace(); } RequestDispatcher disp = request.getRequestDispatcher("/EmployeeController?action=view"); disp.forward(request, response); } else if(action.equals("Search")) { String empId = null; empId = request.getParameter("search"); Employee empRecord = new Employee(); if(empId==null) { empId = " "; } System.out.println(empId); try { empRecord = eMgr.empRecord(empId); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("empRecord2",empRecord); RequestDispatcher disp = request.getRequestDispatcher("/jsp/viewSearch.jsp"); disp.forward(request, response); } }}
[ویرایش] استفاده
سرولتها بیشتر در یکی از موارد زیر کاربرد دارند:
- پردازش دادهها یا ذخیرهسازی آنها، که توسط یک فرم اچتیامال ثبت شدهاست.
- فراهم آوردن محتوای پویا که میتواند پاسخ یک پرسش (کوئری) باشد
- مدیریت حالات اطلاعات که در پروتکل بدون حالت اچتیتیپی ممکن نیست، مانند اضافه نمودن به سبد خرید[۲].
[ویرایش] جستارهای وابسته
سرورهای
[ویرایش] منبع
[ویرایش] پیوندهای بیرونی
- آموزش سرولتِ سان
- آموزش مبتدی و متوسط در جیاسپی به همراه کد منبع
- توضیحات محصول سان، سرولت
- جیاسآر
- جیاسآر ۳۱۵ - سرولت ۳.۰
- جیایآر ۱۵۴ - سرولت ۲.۴ و ۲.۵
- جیاسآر ۵۳ - سرولت ۲.۳
- فنآوری سرولت جاوا آرشیو سرولت سان (۲.۰و ۲.۱)
- ویژگیهای افزوده شده به سرولت ۲.۵ در جاوا ورلد
- مستندات رابط برنامهنویسی سرولت ۲.۵
|
|||||||||||||||||||||||||