JSTL (مكتبة العلامات القياسية JSP)

⚡ ملخص ذكي

مكتبة علامات JSP القياسية (JSTL) هي مجموعة من مكتبات علامات JSP المخصصة التي توفر وظائف تطوير الويب الشائعة مثل التكرار والمنطق الشرطي ومعالجة الاستثناءات والاستيراد وإعادة التوجيه، مما يجعل كود JSP أكثر وضوحًا وقابلية للنقل وأسهل في القراءة من البرامج النصية.

  • 🏷️ تعريف JSTL: مجموعة قياسية من مكتبات علامات JSP المخصصة لمهام الويب الشائعة.
  • ✨ المزايا: ينتج رمزًا نظيفًا وقابلًا للنقل يسهل على البشر والأدوات قراءته مقارنةً بالبرامج النصية.
  • 🔧 الكلمات المفتاحية الأساسية: تتعامل الدوال out و catch و import و forEach و if و redirect مع المخرجات والأخطاء والتضمينات والحلقات والشروط.
  • 🔁 التكرار والمنطق: تقوم حلقة forEach بالتكرار على النطاقات، بينما تضيف if و catch معالجة الشروط والاستثناءات.
  • 🛠️ الوسوم المخصصة: أنشئ علامات مُعرّفة من قِبل المستخدم عن طريق توسيع SimpleTagSupport، وتجاوز doTag()، و mapping في نطاق المستوى الأعلى.
  • 📄 واجهة الوسم: مكتبة الوسوم Descriptأو (TLD) يربط أسماء العلامات بفئات المعالجات الخاصة بها لحاوية JSP.

JSTL - مكتبة علامات JSP القياسية

ما هو JSTL في Java?

JSTL لتقف على Java مكتبة العلامات القياسية لصفحات الخادم، وهي عبارة عن مجموعة من مكتبات علامات JSP المخصصة التي توفر وظائف تطوير الويب الشائعة. JSTL هي مكتبة علامات قياسية لـ JSP.

مزايا JSTL

فيما يلي مزايا JSTL:

  1. العلامة القياسية: يوفر طبقة غنية من الوظائف المحمولة لصفحات JSP. من السهل على المطور فهم الكود.
  2. Code أنيق ونظيف: نظرًا لأن البرامج النصية تربك المطورين، فإن استخدام JSTL يجعل الكود أنيقًا ونظيفًا.
  3. أوتوماتيك Javaدعم الفاصوليا: لديها ميزة JSTL على البرامج النصية JSP. مقابض لغة JSTL Expression Javaكود الفول بسهولة جدا. لا نحتاج إلى إسقاط الكائنات التي تم استردادها كسمات محددة النطاق. سيكون استخدام تعليمات برمجية JSP scriptlets أمرًا معقدًا، وقد قامت JSTL بتبسيط هذا الغرض.
  4. أسهل للإنسان في القراءة:JSTL يعتمد على XML، وهو مشابه جدًا لـ HTML. وبالتالي، من السهل على المطورين أن يفهموا ذلك.
  5. أسهل لأجهزة الكمبيوتر لفهم: أدوات مثل Dreamweaver وتقوم الصفحة الأولى بإنشاء المزيد والمزيد من أكواد HTML. تقوم أدوات HTML بعمل رائع في تنسيق كود HTML. يتم خلط كود HTML مع الكود النصي. نظرًا لأنه يتم التعبير عن JSTL كعلامات متوافقة مع XML، فمن السهل على إنشاء HTML تحليل كود JSTL داخل المستند.

علامات JSTL

العلامات الأساسية هي العلامات الأكثر استخدامًا في JSP. أنها توفر الدعم ل

  • تكرار
  • المنطق الشرطي
  • قبض على الاستثناء
  • عنوان URL للأمام
  • إعادة توجيه، الخ.

لاستخدام العلامات الأساسية، نحتاج إلى تحديد مكتبة العلامات أولاً، وفيما يلي الصيغة التي تتضمن مكتبة العلامات.

بناء الجملة :

<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>

هنا،

  • يمكن استخدام البادئة لتحديد كافة العلامات الأساسية و
  • uri هي مكتبة taglib التي يتم استيرادها منها

دعونا نرى بعض العلامات الأساسية بالتفصيل،

1. خارج

  • يتم عرض نتيجة التعبير في علامة الخروج
  • يمكنه الهروب مباشرة من علامات XML. وبالتالي، لا يتم تقييمها كعلامات فعلية

بناء الجملة:

<c:out value="" default="" escapeXML="">
  • تمثل القيمة هنا المعلومات للمخرجات، وهي إلزامية
  • الافتراضي هو الفشل في إخراج المعلومات، وهو ليس إلزاميا
  • escapeXML – يكون صحيحًا إذا كان يتجنب أحرف XML.

على سبيل المثال:

Coretag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP1</title>
</head>
<body>

</body>
</html>

شرح الكود:

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c". وبالتالي، يمكن استخدامه كبادئة لجميع العلامات الأساسية.

Code خط 12: نحن هنا نستخدم العلامة الأساسية مع البادئة "c" وسيؤدي ذلك إلى طباعة القيمة في علامة التعبير. ومن ثم، فإن الإخراج سيكون الاسم

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي:

العلامات الأساسية JSTL - خارج

الإخراج:

  • نحن نحصل على القيمة كاسم من العلامة الأساسية "out" والتي سيتم طباعتها في دفق الإخراج.

2. الصيد

  • إنه يلتقط أي استثناء قابل للطرح يحدث في الجسم ويظهر كمخرج.
  • يتم استخدامه لمعالجة الأخطاء والقبض عليها.

بناء الجملة:

<c:catchvar="">

يمثل var هنا اسم المتغير الذي سيحتوي على استثناء قابل للرمي.

على سبيل المثال:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP2</title>
</head>
<body>
<c:catch var="guruException">
   <% int num = 10/0; %>
</c:catch>
The Exception is : ${guruException}
</body>
</html>

شرح الكود:

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية

Code السطر 11-13: يتم استخدام Coretag Catch لالتقاط الاستثناء وطباعته. هنا يتم رفع الاستثناء عندما يكون 10/0 وهذا الاستثناء له اسم "guruException".

Code خط 14: نحن نقوم بطباعة "guruException".

عندما تقوم بتنفيذ الكود، سوف تحصل على الناتج التالي:

العلامات الأساسية JSTL - قبض

الإخراج:

  • نحصل على الاستثناء الحسابي كـ /بصفر، ويتم طباعته في الإخراج باستخدام المتغير "guruException"

3. استيراد

  • يمكننا استيراد محتويات ملف آخر إلى صفحة JSP كما فعلنا في JSP تشمل العمل.
  • وهنا يمكننا أيضًا أن ندرج URL وسيتم عرض المحتويات على تلك الصفحة.

بناء الجملة:

<c:importvar="" uri="">

هنا var هو اسم متغير وهو معرف سيحمل اسم الملف/URI. uri هو اسم ملف نسبي أو uriname.

coretag_jsp31.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP 31</title>
</head>
<body>
<c:import var="displayfile" url="coretag_jsp32.jsp">
</c:import>
<c:out value="${displayfile}"/>
</body>
</html>

Coretag_jsp32.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a>The file is diplayed after importing</a>
</body>
</html>

شرح الكود:

Coretag_jsp31.jsp

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية

Code السطر 11-12: نحن هنا نقوم باستيراد ملف coretag_jsp32.jsp إلى هذا الملف باستخدام علامة الاستيراد

Code خط 13: نحن هنا نقوم بطباعة الملف coretag_jsp32.jsp باستخدام علامة out.

عند تنفيذ الكود أعلاه، ستحصل على الإخراج التالي.

العلامات الأساسية JSTL - استيراد

الإخراج:

  • تتم طباعة Coretag_jsp32 في المخرجات حيث تم استيراد هذا الملف في coretag_jsp31.jsp.

4. لكل

  • يتم استخدامه لتكرار عدد العناصر في سلسلة من البيانات.
  • إنه نفس أ Java com.forloop.

بناء الجملة:

<c:forEach var="" begin=""  end="">
  • يمثل var هنا اسم المتغير الذي سيحمل اسم العداد
  • يمثل البدء قيمة بدء العداد
  • سوف تمثل النهاية قيمتها النهائية

على سبيل المثال:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP4</title>
</head>
<body>
<c:forEach var="gurucount" begin="5" end="10">
 <c:out value="${gurucount}"/>
</c:forEach>
</body>
</html>

شرح الكود:

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية

Code السطر 11-13: هنا نستخدم حلقة "forEach" حيث يكون اسم المتغير "gurucount"، والذي بدأ العد بـ 5 وانتهى بالعد بـ 10. نقوم بطباعة المتغير gurucount الذي يحتوي على أرقام تبدأ من 5 إلى 10.

عند تنفيذ الكود، ستحصل على الناتج التالي

العلامات الأساسية لـ JSTL - forEach

الإخراج:

  • الناتج الذي نحصل عليه يبدأ من 5 إلى 10.

5. إذا

  • يتم استخدامه ل الاختبار الظروف.
  • إذا تم استخدام العلامة لاختبار شرط ما إذا كان صحيحًا أم لا بناءً على ذلك، فسيتم تنفيذ كتلة التعليمات البرمجية.

بناء الجملة:

<c:if test="${condition}></c:if>

هنا إذا كان الشرط صحيحا فسيتم تنفيذ سلسلة من العبارات.

على سبيل المثال:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP5</title>
</head>
<body>
<c:set var="count" value="100"/>
<c:if test="${count == 100}">
   <c:out value="The count is 100"/>
</c:if>
</body>
</html>

شرح الكود:

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية

Code خط 11: نحن هنا نقوم بتعيين المتغير المسمى بالعدد إلى 100

Code السطر 12-14: هنا نستخدم "شرط if" حيث نتحقق مما إذا كان العدد يساوي 100. إذا كان يساوي 100، نحصل على الناتج "العدد يساوي 100".

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي

العلامات الأساسية JSTL - إذا

الإخراج:

  • وبما أن شرط "إذا" كان صحيحًا، فإننا نحصل على الناتج كـ "العدد هو 100".

6. إعادة التوجيه

  • يُستخدم لإعادة توجيه الصفحة الحالية إلى صفحة أخرى URL من خلال توفير النسبي URL من هذه العلامة.
  • يدعم السياق النسبي URLs

بناء الجملة:

<c:redirect url="" context=""/>

عنوان url هنا هو عنوان url نسبي يجب إعادة توجيهه إليه واسم السياق لتطبيق الويب المحلي.

على سبيل المثال:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Core Tag JSP6</title>
</head>
<body>
<c:redirect url="/"/>
</body>
</html>

شرح الكود:

Code خط 3: بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "c" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية

Code خط 11: نستخدم هنا "علامة إعادة التوجيه"، حيث نقوم بتحديد اسم url، وعندما ننقر على تلك الصفحة، يتم إعادة التوجيه إلى الموقع الذي تم منحه لإعادة التوجيه.

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي؛

علامات JSTL الأساسية - إعادة التوجيه

الإخراج:

  • نحصل على عنوان URL للإخراج guru99.com والذي تتم إعادة توجيهه بواسطة coretag_jsp6.jsp

العلامات المخصصة JSTL

  • إنه محدد من قبل المستخدم JSP عنصر اللغة.
  • عندما تتم ترجمة JSP إلى servlet، يتم تحويل العلامة المخصصة إلى فئة تتخذ إجراءً على كائن ويتم استدعاؤها كمعالج للعلامة.
  • يتم استدعاء تلك الإجراءات عند تنفيذ servlet بواسطة حاوية الويب.
  • لإنشاء علامة مخصصة معرفة من قبل المستخدم، نحتاج إلى إنشاء معالج العلامات الذي سيقوم بتوسيع SimpleTagSupport وسيتعين عليه تجاوز طريقة doTag().
  • نحن بحاجة إلى إنشاء TLD حيث نحتاج إلى تعيين ملف الفئة في TLD.

مزايا العلامات المخصصة في JSP

فيما يلي مزايا العلامات المخصصة في JSP:

  • الحمل: يجب أن يكون الإجراء الموصوف في مكتبة العلامات قابلاً للاستخدام في أي حاوية JSP.
  • بسيطة: يجب أن يكون المستخدمون غير المتمرسين قادرين على فهم هذه الآلية واستخدامها. يجب أن يجد بائعو وظائف JSP سهولة في جعلها متاحة للمستخدمين كإجراءات.
  • معبرة: يجب أن تدعم الآلية مجموعة واسعة من الإجراءات، بما في ذلك الإجراءات المتداخلة، وعناصر البرمجة النصية داخل أجسام الإجراءات، وإنشاء متغيرات البرمجة النصية واستخدامها وتحديثها.
  • يمكن استخدامه من لغات البرمجة النصية المختلفة: على الرغم من أن مواصفات JSP تحدد حاليًا الدلالات الخاصة بالبرامج النصية فقط في Java لغة برمجة، نريد أن نترك المجال مفتوحًا لإمكانية استخدام لغات برمجة نصية أخرى.
  • تم بناؤه على المفاهيم والآلات الموجودة: نحن لا نريد إعادة اختراع ما هو موجود في مكان آخر. كما أننا نريد تجنب الصراعات المستقبلية كلما أمكننا التنبؤ بها.

بناء الجملة:

لنفترض أننا بصدد إنشاء اختبارGuru ويمكننا استخدام فئة taghandlertestTag، والتي ستتجاوز طريقة doTag().

<ex:testGuru/>
Class testTag extends SimpleTagSupport{ public void doTag()}

سيتعين علينا أيضًا تعيين فئة testTag هذه في TLD (مكتبة العلامات Descriptأو) لأن حاوية JSP ستنشئ خريطة تلقائيًاping بين ملف الفئة و uri المذكور في ملف TLD.

واجهة علامة JSP

  • سيتعين على هذه الفئة توسيع فئة SimpleTagSupport.
  • سيتعين على هذه الفئة تجاوز طريقة doTag () التي تعد جزءًا من فئة SimpleTagSupport (التجاوز هو طريقة موروثة من الفئة الأصلية).
  • هذه الواجهة هي واجهة فرعية لواجهة JSPTag.
  • يوفر طرقًا للتنفيذ في بداية العلامة ونهايتها.
  • نحتاج أيضًا إلى تعيين هذه الفئة في TLD، أي واصف مكتبة العلامات

نحن نعتبر في المثال أدناه

طريقة واجهة العلامة

  • doTag() هي طريقة نحتاج إلى تجاوزها والتي ستحتوي على محتويات العلامة.
  • يأخذ سياق JSP الحالي باستخدام getJSPContext()

على سبيل المثال:

Customtag_jsp1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Custom Tag</title>
</head>
<body>
<ex:guruTag/>
</body>
</html>

Custom.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Test TLD</short-name>
  <tag>
    <name>guruTag</name>
    <tag-class>demotest.guruTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

guruTag.java(TagHandler)

package demotest;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class guruTag extends SimpleTagSupport{
	public void doTag() throws JspException,IOException
	{
		JspWriter out = getJspContext().getOut();
		out.println("Guru Tag");
	}

}

شرح الكود:

guruTag.java(TagHandler)

Code خط 6:تقوم فئة guruTag بتمديد فئة SimpleTagSupport الموجودة في ملف jar javax.servlet.JSP

Code خط 7: نحن هنا نتجاوز طريقة doTag () التي تطرح JspException وIOException.

Code السطر 9-10: في هذه الطريقة، سيتم تضمين الكود في علامة مخصصة سيتم استدعاؤها. نحن نأخذ كائنًا من نوع JSPWriterوهذا سيؤدي إلى طباعة "Guru يوم - نهار."

Custom.tld

Code خط 6: اسم العلامة المخصصة هنا هو "guruTag".

Code خط 7:فئة العلامة هي taghandlerclass، أي guruTag.java. يستغرق المسار الكامل لملف المعالج الذي يتضمن مسار الدليل لموقع الملف.

Customtag_jsp1.jsp

Code خط 3:بادئة taglib هذه مطلوبة لجميع العلامات والبادئة المضافة هي "ex" ومن ثم يمكن استخدامها كبادئة لجميع العلامات الأساسية ويكون uri مخصصًا.tld الذي يعين معالج العلامات.

Code خط 11: نقوم هنا بتعريف العلامة المخصصة "guruTag"، والتي ستستدعي طريقة doTag() لفئة المعالج وسيتم تنفيذ الكود الموجود بداخلها.

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي

واجهة علامة JSP

الإخراج:

  • نحصل على الناتج على النحو التالي: "GuruTag" من guruTag.java أي TagHandler، الذي يتجاوز طريقة doTag() والذي يطبع "Guru "الوسم" كناتج.

الأسئلة الشائعة

تحتوي مكتبة JSTL على خمس مجموعات من الوسوم: الأساسية، والتنسيق (التدويل)، وSQL، وXML، والوظائف. تتولى الوسوم الأساسية معالجة التكرار والمنطق، بينما تغطي وسوم التنسيق وSQL وXML والوظائف الترجمة وقواعد البيانات وXML وأدوات معالجة النصوص.

تستخدم مكتبة JSTL علامات قابلة للقراءة تشبه علامات XML للمنطق، بينما تقوم البرامج النصية بتضمين البيانات الخام Java في JSP. ينتج JSTL صفحات أنظف وأسهل صيانة ويتجنب الخلط Java كتابة التعليمات البرمجية باستخدام ترميز HTML.

ملف TLD هو ملف XML يربط أسماء العلامات المخصصة بفئات المعالجة الخاصة بها. يقرأ حاوية JSP ملف TLD لمعرفة أي منها Java الفئة المراد تنفيذها لكل علامة مخصصة.

بإمكان مساعدي الذكاء الاصطناعي إنشاء وسوم JSTL، وكتابة معالجات وسوم مخصصة، وتحويل البرامج النصية إلى JSTL، وشرح لغة التعبير. يُسرّعون بذلك عملية تطوير صفحات JSP بينما يقوم المطورون بمراجعة الكود المُنشأ.

نعم. يمكن لأدوات الذكاء الاصطناعي تحليل كود البرامج النصية وإعادة كتابته باستخدام علامات JSTL الأساسية ولغة التعبير المكافئة، مما يساعدping تحديث صفحات JSP القديمة مع الحفاظ على وظائفها.

تلخيص هذه التدوينة بـ: