سرولت جاکارتا

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از جاوا سرولت)
سرولت جاکارتا
نویسنده(های)
اصلی
پاونی دیوانجی
توسعه‌دهنده(ها)بنیاد اکلیپس
انتشار ابتداییدسامبر ۱۹۹۶؛ ۲۷ سال پیش (۱۹۹۶}})
انتشار پایدار
5.0
۷ سپتامبر ۲۰۲۰؛ ۳ سال پیش (۲۰۲۰-07}})
مخزن
نوشته‌شده باجاوا
بن‌سازه رایانشسکوی جاوا، نسخه سازمانی
حجم2.56 MB
گونهمولفه نرم‌افزاری برای واسط برنامه‌نویسی وب
پروانهپروانه همگانی اکلیپس
وبگاه

یک سرولت جاکارتا (به انگلیسی: Jakarta Servlet) با نام پیشین جاوا سرولت (به انگلیسی: Java Servlet) یک مولفه نرم‌افزاری به زبان جاوا است که توانمندی‌های یک سرور (رایانه خدمت‌رسان) را گسترش می‌دهد. اگرچه سرورها می‌توانند به انواع مختلفی از درخواست پاسخ بدهند، اما به صورت معمول «گنجانه‌های وب» را برای میربانی از «برنامه‌های کاربردی وب» روی سرورهای وب، پیاده‌سازی می‌کنند، و بنابراین آن‌ها واجد شرایط یک واسط برنامه‌سازی کاربردی وب سرولت در سمت سرور هستند. این سرولت‌ها، همتای جاوایی، برای دیگر فناوری‌های محتوای پویای وب، مثل PHP و ASP.NET هستند.

زندگی یک فایل سرولت.

سرولت برنامه‌ای در زبان برنامه‌نویسی جاوا برای توسعه توانایی‌های سرورها است، هرچند سرولت‌ها می‌توانند به هر نوع درخواستی پاسخ دهند، اما بیشترین کاربرد را در استقرار برنامه‌هایی با قابلیت استقرار روی وب سرورها دارند، و می‌توان سرولت جاوا را نمونه‌ای مانند پی اچ پی ای اس پی دات نت دانست.[۱]

یک سرولت کلاسی از جاواست که در جاوای سازمانی مطابق با رابط برنامه‌نویسی سرولت جاواست، پروتکلی که مسئول پاسخ به درخواست است. آن‌ها تنها به پروتکل مشتری-سرور محدود نمی‌شود، ولی بیشتر مواقع از پروتکل انتقال ابرمتن استفاده می‌نماید؛ بنابراین کلمهٔ سرولت بیشتر بر اچ‌تی‌تی‌پی سرولت دلالت دارد.[۲] توسعه‌دهندهٔ نرم‌افزار از سرولت برای اضافه کردن محتوای پویا به سرور وب با استفاده از سکوی جاوا استفاده می‌نماید. صفحهٔ تولید شده عمدتاً شامل محتوای اچ‌تی‌ام‌ال است ولی گاهی نیز سایر داده‌های مانند اکس‌ام‌ال را نیز شامل می‌شود. سرولت‌ها، همتای مبتنی بر جاوای فناوری‌هایی غیر جاوایی مانند سی‌جی‌ال و صفحه‌های سرور فعال است. سرولت‌ها می‌توانند حالت وضعیت متغیرها را در یک نشست حفظ نمایند. این کار به کمک کوکی اچ‌تی‌تی‌پی و موتور بازنویسی انجام می‌دهند.

تاریخچه[ویرایش]

مشخصات کلی سرولت‌ها توسط سان میکروسیستمز ایجاد و نگارش اولش با شمارهٔ ۱٫۰ در ژوئن ۱۹۹۷(خرداد ۱۳۷۶) نهایی شد. با انتشار نگارش ۲٫۳ مشخصات سرورلت تحت فرایند جمعیت جاوا (ف.ج. ج) قرار گرفت. سند جی‌اس‌ار ۵۳، محتوی مشخصات «جاوا سرولت ۲٫۳» و «صفحات جاوا سرور» است. سند جی‌اس‌ار ۱۵۴ نیز مشخصات سرولت ۲٫۴ و ۲٫۵ را در برد دارد. از مارس ۲۰۱۰ (اسفند ۱۳۸۸) نگارش کنونی سرولت با شماره ۳٫۰ منتشر شد. در وبلاگ آن بر روی Java.net، کارمند کارآزمودهٔ سان و مدیر ماهی شیشه‌ای به تشریح تاریخچهٔ فناوری سرولت پرداخت. جیمز گاسلینگ فردی بود که در روزهای آغازین جاوا فکر ایجاد آن را می‌پروراند؛ ولی مفهوم آن تا زمان ارائه آن به صورت محصول از سوی جاوا عملی نشد. این پیش از عملی شدن جاوای سازمانی بود.

نگارش‌ای‌پی‌ال سرولت تاریخ انتشار شماره جی اس آر سکو تغییرات مهم


Jakarta Servlet 5.0.0 M1 Jun 12, 2020 5.0 Jakarta EE 9

API از پکیج javax.servlet به jakarta.servlet تغییر یافت.

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 بخشی از کیت توسعهٔ جاوا سرولت ۲٫۰
سرولت ۱٫۰ خرداد ۱۳۷۹ نامعلوم نامعلوم

برتری‌ها نسبت به سی‌جی‌آی[ویرایش]

برتری‌های استفاده ار سرولت را می‌توان در افزایش اجرا و راحتی استفادهٔ ترکیبی به سی‌جی‌آی سنتی است. اسکریپت‌های سی‌جی‌آیِ سنتی که با زبان جاوا نوشته می‌شود دارای مشکلاتی در اجراست:

  • در هنگام ایجاد درخواست اچ‌تی‌تی‌پی، به ازای هر درخواست اسکریپت سی‌جی‌آی، فرایندی ایجاد می‌شود. این سربار پردازشی ایجاد شده می‌تواند بر سیستم فشار شدیدی وارد نماید، مخصوصاً هنگامی که پردازش کار پردازشی سریعی را ایجاد می‌نماید؛ بنابراین ایجاد پردازش از خودِ پردازش بیشتر زمان می‌برد. جاوا سرولت این مشکل را حل نموده‌است، سرولت یک پردازش جداگانه نیست. هر درخواست دریافت شده، توسط یک نخ در فرایند وبِ موجود بررسی می‌شود، که موضوع ایجاد فرایند جداگانه به وسیلهٔ نسخه‌برداری (فورک) توسط شبح اچ‌تی‌تی‌پی را بر طرف می‌نماید.
  • درخواست‌های هم‌زمان در سی‌جی‌آی موجب آن می‌شود که اسکریپت سی‌جی‌آی، به دفعات درخواستی در حافظه بارگذاری شود. در حالیکه با استفاده از سرولت‌ها نیز به ازای هر درخواست یک نخِ جدید تولید می‌شود.
  • تنها یک کلاس که به صورت مشترک مورد استفاده است، در حافظه ایجاد می‌گردد. این کار باعثِ کاهش استفاده از حافظه و بهبود مدیریت داده‌ها خواهد شد.
  • یک سرولت توسط موتورِ سرولت در محیطِ محدود اجرا می‌شود که به آن گودال ماسه می‌گویند. این کار شبیه اجرای اپلت در گودالِ ماسهٔ مرورگر وب است. این کار باعث کاهش خطرات بالقوه خواهدشد.[۲]

چرخه زندگی یک سرولت[ویرایش]

  1. کانتِینِر سازندهٔ بدون آرگومان را صدا می‌زند
  2. کانتِینِر وب متد init() را صدا می‌زند. این متد سرولت را مقداردهی نموده و باید پیش از آغاز زندگی سرولت فراخوانی شود، متد init() تنها یکبار فراخوانی می‌شود.
  3. بعد از مقداردهی، سرولت می‌تواند به پاسخِ درخواست‌های ارسال شده بپردازد. هر درخواست اچ‌تی‌تی‌پی در نخِ مخصوص و جداگانه‌ای پاسخ داده می‌شود. کانتینر وب، متد service() را به ازای هر درخواست فراخوانی می‌نماید. متد service() نوع درخواست دریافت شده را تعیین و آن را به متد مناسبی که وظیفه‌اش رفع نیازهای آن درخواست است، ارسال می‌نماید. توسعه‌دهندهٔ سرولت باید این متدها را پیاده‌سازی نماید. در صورت عدم پیاده‌سازی متد یادشده، متدِ والدِ کلاس فراخوانی خواهد شد که معمولاً با ارسال یک خطا به درخواست‌کننده همراه است.
  4. در نهایت، کانتینر وب، متد 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);
}

}}

استفاده[ویرایش]

سرولت‌ها بیشتر در یکی از موارد زیر کاربرد دارند:

  • پردازش داده‌ها یا ذخیره‌سازی آن‌ها، که توسط یک فرم اچ‌تی‌ام‌ال ثبت شده‌است.
  • فراهم آوردن محتوای پویا که می‌تواند پاسخ یک پرسش (کوئری) باشد
  • مدیریت حالات اطلاعات که در پروتکل بدون حالت اچ‌تی‌تی‌پی ممکن نیست، مانند اضافه نمودن به سبد خرید.[۲]

جستارهای وابسته[ویرایش]

سرورهای

منابع[ویرایش]

  1. «سرولت». http://www.webopedia.com/: وبوپدیا. دریافت‌شده در ۴ اردیبهشت ۱۳۹۰. برنامه‌ای کوچک که بر روی سرور اجرا می‌شود. این عبارت معمولاً به برنامهٔ اپلت جاوا اطلاق می‌شود که در محیط مرورگر اجرا می‌شود.
  2. ۲٫۰ ۲٫۱ ۲٫۲ [۱] بایگانی‌شده در ۲۷ اوت ۲۰۱۱ توسط Wayback Machine ۱٫۱ سرولت چیست؟

پیوند به بیرون[ویرایش]