زبان عبارات جایاکارتا (Jakarta Expression Language)
زبان عبارات جایاکارتا (EL)، که با نامهای پیشین Expression Language و Unified Expression Language نیز شناخته میشود، یک زبان برنامهنویسی با هدف خاص است که عمدتاً در برنامههای وب Jakarta EE برای جاسازی و ارزیابی عبارات در صفحات وب به کار میرود.
نویسندگان مشخصات و گروههای متخصص فناوریهای لایه وب Java EE بر روی یک زبان عبارات یکپارچه کار کردند که ابتدا در مشخصات JSP 2.1 (JSR-245) گنجانده شد و بعدها به طور مستقل در JSR-341، بخشی از Java EE 7، مشخص گردید.
تاریخچه
ریشه در JSTL
زبان عبارات از بخشی از کتابخانه تگ استاندارد JavaServer Pages (JSTL) آغاز شد و در ابتدا SPEL (Simplest Possible Expression Language) نام داشت و سپس به سادگی Expression Language (EL) نامیده شد. این زبان یک زبان اسکریپتنویسی بود که امکان دسترسی به مؤلفههای جاوا (JavaBeans) را از طریق JSP فراهم میکرد. از زمان JSP 2.0، از این زبان در تگهای JSP برای جداسازی کد جاوا از JSP و دسترسی آسانتر به مؤلفههای جاوا (نسبت به کد جاوا) استفاده شده است.
JSP 2.0
در طول سالها، زبان عبارات برای گنجاندن قابلیتهای پیشرفتهتر تکامل یافت و در مشخصات JSP 2.0 گنجانده شد. اسکریپتنویسی برای طراحان محتوای وب که دانش کمی از زبان اصلی جاوا داشتند، آسانتر شد. این زبان اسکریپتنویسی، JSP را به معنای واقعی کلمه به یک زبان اسکریپتنویسی تبدیل کرد. پیش از EL، JSP شامل تگهای ویژهای مانند scriptlets، expressions و غیره بود که کد جاوا به صراحت در آنها نوشته میشد. با EL، طراح محتوای وب تنها نیاز دارد نحوه فراخوانی صحیح متدهای اصلی جاوا را بداند.
EL از نظر نحوی و معنایی شبیه به عبارات جاوا اسکریپت بود:
- تبدیل نوع (typecasting) وجود ندارد.
- تبدیل انواع معمولاً به طور ضمنی انجام میشود.
- نقل قولهای دوگانه و تکی معادل هستند.
object.propertyهمان معنایobject['property']را دارد.
EL همچنین برنامهنویس را از دانستن جزئیات نحوه دسترسی به مقادیر آزاد کرد: object.property میتواند (بسته به نوع object) به معنای object.get("property") یا object.getProperty("property") یا object.getProperty() و غیره باشد.
EL 2.1
در طول توسعه JSP 2.0، فناوری JavaServer Faces (JSF) منتشر شد که به یک زبان عبارات نیز نیاز داشت، اما زبان عبارات تعریف شده در مشخصات JSP 2.0 تمام نیازهای توسعه با فناوری JSF را برآورده نمیکرد. آشکارترین محدودیتها این بود که عبارات آن بلافاصله ارزیابی میشدند و مؤلفههای JSF نمیتوانستند متدهایی را بر روی اشیاء سمت سرور فراخوانی کنند. یک زبان قدرتمندتر با ویژگیهای جدید زیر ایجاد شد:
- عبارات با ارزیابی تأخیری (Deferred expressions) که بلافاصله ارزیابی نمیشوند.
- عباراتی که میتوانند دادهها را تنظیم (set) و دریافت (get) کنند.
- عبارات متد (Method expressions) که میتوانند متدها را فراخوانی کنند.
زبان عبارات جدید برای اهداف JSF به خوبی کار کرد. اما توسعهدهندگان به دلیل تداخل، در ادغام JSP EL با JSF EL با مشکل مواجه شدند. به دلیل این ناسازگاریها، ابتکار زبان عبارات یکپارچه برای یکپارچهسازی این زبانهای عبارات آغاز شد. از JSP 2.1، زبانهای عبارات JSP 2.0 و JSF 1.1 در یک زبان عبارات یکپارچه (EL 2.1) ادغام شدهاند.
EL 3.0
نسخه 3.0 زبان عبارات (دیگر نیازی به یکپارچه نبودن نبود) در یک JSR مستقل از مشخصات JSP و JSF در JSR-341 توسعه یافت. برخی ویژگیهای جدید اضافه شد، به ویژه معادلهای EL برای streams و lambda expressions جاوا 8.
EL 4.0
نسخه 4.0 در تاریخ 2020-10-07 منتشر شد. API از بسته javax.el به بسته jakarta.el منتقل شد، که بخشی از انتقال از Java EE به Jakarta EE بود.
ویژگیها
EL یکپارچه، ترکیبی از زبانهای عبارات JSP و JSF است. علاوه بر ویژگیهای موجود در JSP EL، EL یکپارچه ویژگیهای زیر را دارد:
- ارزیابی تأخیری
- پشتیبانی از عباراتی که میتوانند مقادیر را تنظیم کنند و عباراتی که میتوانند متدها را فراخوانی کنند.
- یک API قابل پلاگین برای تجزیه عبارات
مثالها
این یک مثال ساده از استفاده از Unified EL در یک تگ c:out در JSTL را نشان میدهد:
<c:out value="${myBean.myField}" />
یک عبارت که متدی را با یک پارامتر فراخوانی میکند:
${myBean.addNewOrder('orderName')}
پیادهسازیها
- Java Expression Language (JEXL): کتابخانهای است که برای تسهیل پیادهسازی ویژگیهای پویا و اسکریپتنویسی در برنامهها و فریمورکهای نوشته شده به زبان جاوا طراحی شده است. آخرین نسخه منتشر شده: 3.2.1، 25 ژوئن 2021.
- JUEL: یک پیادهسازی متنباز از Unified Expression Language (EL) است که به عنوان بخشی از استاندارد JSP 2.1 (JSR-245) مشخص شده است. این پیادهسازی پایدار و کامل محسوب میشود و تحت مجوز Apache License 2.0 منتشر شده است. JUEL همچنین برای استفاده در برنامههای غیر JSP مناسب است. آخرین نسخه منتشر شده: 2.2.7، 6 فوریه 2014.
- Apache Commons EL: مفسر EL برای JSP 2.0 از Apache است. آخرین نسخه منتشر شده: 1.0، 20 ژوئن 2003. لینکهای دانلود کد منبع و باینری شکسته هستند.
همچنین ببینید
- OGNL – یک EL متنباز که توسط WebWork (و Struts2) استفاده میشود.
- MVEL – یک EL متنباز که در بسیاری از پروژههای مبتنی بر جاوا استفاده میشود.
- SpEL – Spring Expression Language، یک EL متنباز که بخشی از Spring Framework است. عمدتاً در پروژههای مجموعه Spring استفاده میشود، اما از آنجایی که مستقل از فناوری است، میتواند در پروژههای دیگر نیز به کار رود.
- Ant-Flaka - با هدف سادهسازی اسکریپتهای بیلد Ant با کمک EL.
- CEL – یک EL متنباز که توسط گوگل توسعه یافته است.
منابع
پیوندهای خارجی
- JSR 245: JavaServer Pages 2.1
- Unified Expression Language (مقاله در Sun Developer Network (SDN))
- Expression Language
- Unified Expression Language for JSP and JSF (مقاله در java.net)
مفاهیم مرتبط
- جاوا (زبان برنامهنویسی)
- زبانهای اسکریپتنویسی