سرولت جاکارتا
یک سرولت جاکارتا (به انگلیسی: Jakarta Servlet) با نام پیشین جاوا سرولت (به انگلیسی: Java Servlet) یک مولفه نرمافزاری به زبان جاوا است که توانمندیهای یک سرور (رایانه خدمترسان) را گسترش میدهد. اگرچه سرورها میتوانند به انواع مختلفی از درخواست پاسخ بدهند، اما به صورت معمول «گنجانههای وب» را برای میربانی از «برنامههای کاربردی وب» روی سرورهای وب، پیادهسازی میکنند، و بنابراین آنها واجد شرایط یک واسط برنامهسازی کاربردی وب سرولت در سمت سرور هستند. این سرولتها، همتای جاوایی، برای دیگر فناوریهای محتوای پویای وب، مثل PHP و ASP.NET هستند.
نویسنده(های) اصلی | پاونی دیوانجی |
---|---|
توسعهدهنده(ها) | بنیاد اکلیپس |
انتشار ابتدایی | دسامبر ۱۹۹۶ |
انتشار پایدار | |
مخزن | |
نوشتهشده با | جاوا |
بنسازه رایانش | سکوی جاوا، نسخه سازمانی |
حجم | 2.56 MB |
گونه | مولفه نرمافزاری برای واسط برنامهنویسی وب |
پروانه | پروانه همگانی اکلیپس |
وبگاه |
سرولت برنامهای در زبان برنامهنویسی جاوا برای توسعه تواناییهای سرورها است، هرچند سرولتها میتوانند به هر نوع درخواستی پاسخ دهند، اما بیشترین کاربرد را در استقرار برنامههایی با قابلیت استقرار روی وب سرورها دارند، و میتوان سرولت جاوا را نمونهای مانند پی اچ پی ای اس پی دات نت دانست.[1]
یک سرولت کلاسی از جاواست که در جاوای سازمانی مطابق با رابط برنامهنویسی سرولت جاواست، پروتکلی که مسئول پاسخ به درخواست است. آنها تنها به پروتکل مشتری-سرور محدود نمیشود، ولی بیشتر مواقع از پروتکل انتقال ابرمتن استفاده مینماید؛ بنابراین کلمهٔ سرولت بیشتر بر اچتیتیپی سرولت دلالت دارد.[2] توسعهدهندهٔ نرمافزار از سرولت برای اضافه کردن محتوای پویا به سرور وب با استفاده از سکوی جاوا استفاده مینماید. صفحهٔ تولید شده عمدتاً شامل محتوای اچتیامال است ولی گاهی نیز سایر دادههای مانند اکسامال را نیز شامل میشود. سرولتها، همتای مبتنی بر جاوای فناوریهایی غیر جاوایی مانند سیجیال و صفحههای سرور فعال است. سرولتها میتوانند حالت وضعیت متغیرها را در یک نشست حفظ نمایند. این کار به کمک کوکی اچتیتیپی و موتور بازنویسی انجام میدهند.
تاریخچه
مشخصات کلی سرولتها توسط سان میکروسیستمز ایجاد و نگارش اولش با شمارهٔ ۱٫۰ در ژوئن ۱۹۹۷(خرداد ۱۳۷۶) نهایی شد. با انتشار نگارش ۲٫۳ مشخصات سرورلت تحت فرایند جمعیت جاوا (ف.ج. ج) قرار گرفت. سند جیاسار ۵۳، محتوی مشخصات «جاوا سرولت ۲٫۳» و «صفحات جاوا سرور» است. سند جیاسار ۱۵۴ نیز مشخصات سرولت ۲٫۴ و ۲٫۵ را در برد دارد. از مارس ۲۰۱۰ (اسفند ۱۳۸۸) نگارش کنونی سرولت با شماره ۳٫۰ منتشر شد. در وبلاگ آن بر روی Java.net، کارمند کارآزمودهٔ سان و مدیر ماهی شیشهای به تشریح تاریخچهٔ فناوری سرولت پرداخت. جیمز گاسلینگ فردی بود که در روزهای آغازین جاوا فکر ایجاد آن را میپروراند؛ ولی مفهوم آن تا زمان ارائه آن به صورت محصول از سوی جاوا عملی نشد. این پیش از عملی شدن جاوای سازمانی بود.
نگارشایپیال سرولت | تاریخ انتشار | شماره جی اس آر | سکو | تغییرات مهم |
---|---|---|---|---|
Jakarta Servlet 5.0.0 M1 | Jun 12, 2020 | 5.0 | Jakarta EE 9 |
API از پکیج |
Jakarta Servlet 4.0.3 | Aug 13, 2019 | 4.0 | Jakarta EE 8 | تغییر نام از نام تجاری «جاوا» |
سرولت ۴٫۰ | شهریور ۱۳۹۶ | ۳۶۹ | Java EE 8 | HTTP/2 |
سرولت ۳٫۱ | خرداد ۱۳۹۲ | ۳۴۰ | Java EE 7 | Non-blocking I/O, HTTP protocol upgrade mechanism (WebSocket) |
سرولت ۳٫۰ | آذر ۱۳۸۸ | ۳۱۵ | 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 |
سرولت ۲٫۰ | نامعلوم | JDK 1.1 | بخشی از کیت توسعهٔ جاوا سرولت ۲٫۰ | |
سرولت ۱٫۰ | خرداد ۱۳۷۹ | نامعلوم | نامعلوم |
برتریها نسبت به سیجیآی
برتریهای استفاده ار سرولت را میتوان در افزایش اجرا و راحتی استفادهٔ ترکیبی به سیجیآی سنتی است. اسکریپتهای سیجیآیِ سنتی که با زبان جاوا نوشته میشود دارای مشکلاتی در اجراست:
- در هنگام ایجاد درخواست اچتیتیپی، به ازای هر درخواست اسکریپت سیجیآی، فرایندی ایجاد میشود. این سربار پردازشی ایجاد شده میتواند بر سیستم فشار شدیدی وارد نماید، مخصوصاً هنگامی که پردازش کار پردازشی سریعی را ایجاد مینماید؛ بنابراین ایجاد پردازش از خودِ پردازش بیشتر زمان میبرد. جاوا سرولت این مشکل را حل نمودهاست، سرولت یک پردازش جداگانه نیست. هر درخواست دریافت شده، توسط یک نخ در فرایند وبِ موجود بررسی میشود، که موضوع ایجاد فرایند جداگانه به وسیلهٔ نسخهبرداری (فورک) توسط شبح اچتیتیپی را بر طرف مینماید.
- درخواستهای همزمان در سیجیآی موجب آن میشود که اسکریپت سیجیآی، به دفعات درخواستی در حافظه بارگذاری شود. در حالیکه با استفاده از سرولتها نیز به ازای هر درخواست یک نخِ جدید تولید میشود.
- تنها یک کلاس که به صورت مشترک مورد استفاده است، در حافظه ایجاد میگردد. این کار باعثِ کاهش استفاده از حافظه و بهبود مدیریت دادهها خواهد شد.
- یک سرولت توسط موتورِ سرولت در محیطِ محدود اجرا میشود که به آن گودال ماسه میگویند. این کار شبیه اجرای اپلت در گودالِ ماسهٔ مرورگر وب است. این کار باعث کاهش خطرات بالقوه خواهدشد.[2]
چرخه زندگی یک سرولت
- کانتِینِر سازندهٔ بدون آرگومان را صدا میزند
- کانتِینِر وب متد
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);
}
}}
استفاده
سرولتها بیشتر در یکی از موارد زیر کاربرد دارند:
- پردازش دادهها یا ذخیرهسازی آنها، که توسط یک فرم اچتیامال ثبت شدهاست.
- فراهم آوردن محتوای پویا که میتواند پاسخ یک پرسش (کوئری) باشد
- مدیریت حالات اطلاعات که در پروتکل بدون حالت اچتیتیپی ممکن نیست، مانند اضافه نمودن به سبد خرید.[2]
منابع
- «سرولت». http://www.webopedia.com/: وبوپدیا. دریافتشده در ۴ اردیبهشت ۱۳۹۰.
برنامهای کوچک که بر روی سرور اجرا میشود. این عبارت معمولاً به برنامهٔ اپلت جاوا اطلاق میشود که در محیط مرورگر اجرا میشود.
- بایگانیشده در ۲۷ اوت ۲۰۱۱ توسط Wayback Machine ۱٫۱ سرولت چیست؟
پیوند به بیرون
- آموزش سرولتِ سان
- آموزش مبتدی و متوسط در جیاسپی بایگانیشده در ۲۵ نوامبر ۲۰۰۹ توسط Wayback Machine به همراه کد منبع
- توضیحات محصول سان، سرولت
- جیاسآر
- جیاسآر ۳۱۵ - سرولت ۳٫۰
- جیایآر ۱۵۴ - سرولت ۲٫۴ و ۲٫۵
- جیاسآر ۵۳ - سرولت ۲٫۳
- فناوری سرولت جاوا آرشیو سرولت سان (۲٫۰و ۲٫۱)
- ویژگیهای افزوده شده به سرولت ۲٫۵ در جاوا ورلد
- مستندات رابط برنامهنویسی سرولت ۲٫۵