لقد كنت أبرمج باستخدام JSP وASP لفترة طويلة، ومن بين هذين الحلين للبرمجة من جانب الخادم، أشعر بشكل متزايد أن JSP أقوى بكثير من ASP. لماذا يجب أن أختار JSP كأداة تطوير تطبيقات الويب المفضلة لدي من جانب الخادم؟ بالطبع، يتمتع JSP بالعديد من الميزات والوظائف الرائعة، لكن مكتبة علامات JSP كانت أحد أهم الأسباب التي دفعتني لاتخاذ هذا القرار.
لماذا تقول هذا؟ الأسباب ذات شقين: الصيانة وسرعة التطوير. تعد لغات البرمجة النصية من جانب الخادم في الواقع بوتقة انصهار لتطوير الإنترنت. على صفحة الخادم، يمكنك بسهولة مزج أساليب وكائنات البرنامج النصي المختلفة. هذا النوع من الصفحات هو ببساطة المادة الملموسة لبناء الويب. هذا المزيج من "الأشياء" هو الذي يمنح البرامج النصية من جانب الخادم إمكانات قوية لمعالجة المعلومات. فهو يسمح للمبرمجين من جانب الخادم بتطوير صفحات ويب ديناميكية ومرنة. ولكن، من ناحية أخرى، فإن الخلط الحر للنصوص البرمجية له أيضًا عيوبه، وهو أنه من الصعب جدًا صيانته، خاصة مع استمرار حجم المشروع في النمو. ومما يزيد الطين بلة أنه مع زيادة تعقيد التعليمات البرمجية، ستتباطأ سرعة التطوير، وهو أمر لا يفضي إلى تطوير تطبيقات الويب متوسطة الحجم وكبيرة الحجم للعديد من تطبيقات الويب متوسطة الحجم أو الكبيرة من جانب الخادم يتم إطلاقها في وقت متأخر جدًا والتكلفة مرتفعة لا يمكن السيطرة عليها. بالإضافة إلى ذلك، بمجرد تطوير الموقع، لا يزال بحاجة إلى العثور على مبرمجين مؤهلين للحفاظ على هذه الرموز المعقدة إلى حد ما، ونتيجة لذلك، يصبح هؤلاء المبرمجون مصممي ويب عامين، ويلعب التطبيق من جانب الخادم دورًا رئيسيًا في كل من التصميم الجرافيكي النهائي والتنفيذ. لقد ضعفت.
للتغلب على هذه المشكلة، قدم ASP تقنية كائن COM، بينما قدم JSP J2EE كإجراء مضاد. تعتمد هذه الحلول على آليات قواعد التعليمات البرمجية المركزية القابلة لإعادة الاستخدام. ومع ذلك، فهي صعبة الاستخدام للغاية وتستغرق الكثير من الوقت للتعلم. علاوة على ذلك، فإن هذه الحلول لا تقلل من إغراء إنشاء تعليمات برمجية فوضوية، ونتيجة لذلك، يتعين علينا تنظيم فرق تطوير كبيرة ومنظمة بشكل جيد لاستخدام هذه التقنيات. بالنسبة للمشاريع متوسطة الحجم، عادةً ما تكون هذه الأساليب أقل استخدامًا، ولكن في الواقع، تعد مشاريع تطبيقات الويب متوسطة الحجم هي الأكثر شيوعًا. ونتيجة لذلك، تضطر العديد من المشاريع إلى استخدام بيئة التطوير والصيانة التي لا تلبي احتياجاتها.
ولحسن الحظ، يوفر JSP طريقة أفضل لحل هذه المشكلة. توفر مكتبات العلامات طريقة سهلة لإنشاء مجموعات من التعليمات البرمجية قابلة لإعادة الاستخدام. بمجرد تصميم مكتبة العلامات، يمكن استخدامها مرة أخرى في العديد من المشاريع. والأمر الأكثر ملاءمة هو أنه، على عكس COM وJ2EE، طالما أنك تعرف كيفية كتابة JSP، فلن تحتاج إلى تعلم أي مهارات أخرى لإنشاء مكتبة علامات! وأخيرًا، تعمل مكتبات العلامات أيضًا على تحسين إمكانية صيانة تطبيقات الويب. ينعكس هذا التحسن في قابلية الصيانة في التنفيذ السهل للواجهات القابلة للتخصيص المستندة إلى XML على صفحات JSP. ونتيجة لذلك، يمكن لمصممي الويب إنشاء تطبيقات ويب JSP دون معرفة ما هو JSP. بهذه الطريقة، يصبح تطوير الويب مهمة تطوير فريق فعالة للغاية. يمكن لمبرمجي JSP إنشاء علامات مخصصة ووحدات تعليمات برمجية خلفية، بينما يمكن لمصممي الويب استخدام علامات مخصصة والتركيز بالكامل على تصميم الويب نفسه. تحل مكتبة العلامات مشكلة ارتباك التعليمات البرمجية وتقوم بذلك بشكل نظيف وجميل (في الواقع، XML هو جوهر حل هذه المشكلات، لكن مكتبة العلامات لا تزال تلعب دورًا رئيسيًا).
ما هي مكتبة العلامات؟
يمكن اعتبار مكتبة علامات JSP (وتسمى أيضًا مكتبة العلامات المخصصة) وسيلة لإنشاء نصوص برمجية مستندة إلى XML من خلال JavaBeans. من الناحية النظرية، العلامات هي هياكل تعليمات برمجية بسيطة وقابلة لإعادة الاستخدام. على سبيل المثال، في أحدث إصدار من JSPKit (ضمن JSP Insider)، يمكن الوصول بسهولة إلى مستندات XML باستخدام علامات XML. يرجى الاطلاع على القائمة أ أدناه.
القائمة أ: أمثلة على العلامات التي تنفذ تحويلات XML/XSL وصفحات HTML التي تحتوي عليها
<%@ taglib uri=" http://www.jspinsider.com/jspkit/JAXP " prefix="JAXP"%>
<JAXP:TransformerTag>
<JAXP:XMLFile>ج:/xml/example.xml</JAXP:XMLFile>
<JAXP:XSLFile>c:/xml/example.xsl</JAXP:XSLFile>
</JAXP:TransformerTag>
يستخدم المثال أعلاه علامات بسيطة للوصول إلى التعليمات البرمجية الأكثر قوة خلف الكواليس. يقوم جزء العلامة من العبارة أولاً بتحميل ملف XML ثم تطبيق ملف XSL لتحويل محتويات ملف XML إلى ملف معين. تنسيق التمثيل وإرساله إلى العميل، كل هذا يتم فقط باستخدام علامة بسيطة جدًا. تسهل العلامات المخصصة إنشاء وحدات مفتوحة المصدر قابلة لإعادة الاستخدام في مشاريع JSP، وكل ما تحتاجه هو مكتبة العلامات ووثائقها.
الميزات المهمة لمكتبة العلامات
1. سهولة التثبيت على مشاريع متعددة يمكن ترحيل العلامات بسهولة من مشروع JSP واحد إلى مشاريع أخرى. بمجرد إنشاء مكتبة علامات، ما عليك سوى تجميع كل شيء في ملف JAR الذي يمكنك إعادة استخدامه في أي مشروع JSP. أصبحت مكتبات العلامات ذات شعبية متزايدة لأنه يمكن إعادة استخدام العلامات ويمكن استخدامها بسهولة في مشاريعك الخاصة. حاليًا، يمكن العثور على أفضل مورد للعلامات على JSPTags.com.
2. يمكن أن تحتوي مكتبة علامات JSP الموسعة على أي ميزات ووظائف في مواصفات JSP (JSP 1.2). يمكنك توسيع وظائف JSP وزيادتها بلا حدود دون انتظار ظهور الإصدار التالي من JSP. على سبيل المثال، أنت غير راضٍ عن استدعاء JSP المتضمن. يمكنك إنشاء علامات التضمين الخاصة بك والتي تفرض المواصفات الخاصة بك.
3. سهولة الصيانة
مكتبة العلامات تجعل من السهل جدًا صيانة تطبيقات الويب JSP للأسباب التالية:
(1) تطبيق الملصق بسيط وسهل الاستخدام والفهم لأي شخص.
(2) تتركز جميع الرموز المنطقية للبرنامج في معالج العلامات وJavaBeans. وهذا يعني أنه عند ترقية التعليمات البرمجية، لا تحتاج إلى تعديل كل صفحة تستخدم التعليمات البرمجية، بل تحتاج فقط إلى تعديل ملفات التعليمات البرمجية المركزية.
(3) إذا كنت بحاجة إلى إضافة وظائف جديدة، فلن تحتاج إلى تعديل أي صفحات موجودة. يمكنك إضافة سمات إضافية إلى العلامات لتقديم سلوكيات جديدة، بينما تظل السمات القديمة الأخرى دون تغيير، بحيث لا يزال من الممكن استخدام جميع الصفحات القديمة. يعمل بشكل طبيعي . على سبيل المثال، لديك تسمية تجعل كل النص باللون الأزرق:
<BlueText>النص الخاص بي</BlueText>
ولكن في وقت لاحق من المشروع، تريد أن يكون اللون الأزرق أغمق. يمكنك الاحتفاظ بالعلامة الأصلية وإضافة سمة جديدة إليها: الظل، كما هو موضح أدناه:
<BlueText shade="teal">النص الخاص بي</BlueText>
لا يزال بإمكان جميع العلامات القديمة إنتاج نص باللون الأزرق، ولكن يمكنك الآن استخدام نفس العلامة لإنتاج نص أزرق داكن.
(4) تعمل الملصقات على تحسين إمكانية إعادة استخدام التعليمات البرمجية. من المؤكد أن الكود الذي تم اختباره واستخدامه عدة مرات سيكون به عدد أقل من الأخطاء. ولذلك، فإن صفحات JSP التي تستخدم العلامات المخصصة تحتوي أيضًا على عيوب أقل وتكون بطبيعة الحال أكثر ملاءمة للصيانة.
4. توفر مكتبة العلامات الزمنية للتطوير السريع طريقة سهلة لإعادة استخدام التعليمات البرمجية. إحدى الطرق القياسية لإعادة استخدام التعليمات البرمجية في اللغات من جانب الخادم هي استخدام القوالب. بالمقارنة مع استخدام مكتبات النماذج، تعد مكتبات العلامات حلاً أفضل. باستخدام مكتبة القوالب، يتعين عليك تعديل القوالب أو إنشاء واجهة صارمة لكل مشروع، في حين أن مكتبة العلامات لا تحتوي على هذه القيود وتتمتع بجميع مزايا التوجه الكائني، ويمكن أن تكون مرنة وأكثر قابلية للتوسعة، ومن خلال إعادة الاستخدام Code، يمكنك قضاء وقت أقل في التطوير ومزيد من الوقت في تصميم تطبيق الويب الخاص بك. واجهة مكتبة العلامات أيضًا بسيطة جدًا، مما يجعل من السهل جدًا إدراجها واستخدامها وتصحيح الأخطاء.
هيكل العلامات
على الرغم من أن مكتبة العلامات سهلة الاستخدام للغاية، إلا أن آلية التنفيذ الداخلي لإنشاء مكتبة العلامات لا تزال معقدة للغاية، على الأقل أكثر تعقيدًا من إنشاء JavaBean البسيط. يأتي التعقيد من حقيقة أن مكتبة العلامات تتكون من عدة أجزاء. ومع ذلك، ما عليك سوى إتقان معرفة Java وJSP.
تتكون العلامة البسيطة من العناصر التالية:
1. JavaBean: للحصول على فوائد Java وطبيعتها المتأصلة الموجهة للكائنات، يجب وضع التعليمات البرمجية القابلة لإعادة الاستخدام في حاوية تعليمات برمجية منفصلة، وهي JavaBean. لا تعد JavaBeans جزءًا أساسيًا من مكتبة العلامات، ولكنها وحدات التعليمات البرمجية الأساسية التي تستخدمها مكتبة العلامات لتنفيذ المهام المعينة.
2. معالج العلامات: معالج العلامات هو القلب الحقيقي لمكتبة العلامات. يشير معالج العلامات إلى أي موارد خارجية يحتاجها (JavaBeans) ويكون مسؤولاً عن الوصول إلى معلومات صفحة JSP (كائنات PageContext). تقوم صفحة JSP بتمرير سمات العلامة المحددة على الصفحة والمحتوى الموجود في نص العلامة إلى معالج العلامات. عندما يكمل معالج العلامات معالجته، فإنه سيرسل نتائج الإخراج التي تمت معالجتها مرة أخرى إلى صفحة JSP لمزيد من المعالجة.
3. واصف مكتبة العلامات (ملف TLD): هذا ملف XML بسيط يسجل السمات والمعلومات وموقع معالج العلامات. تستخدم حاوية JSP هذا الملف لمعرفة مكان وكيفية استدعاء مكتبة العلامات.
4. ملف web.xml الخاص بموقع الويب: هذا هو ملف تهيئة موقع الويب. في هذا الملف، يجب تحديد العلامات المخصصة المستخدمة في موقع الويب، بالإضافة إلى ملف tld المستخدم لوصف كل علامة مخصصة.
5. تحرير الملفات (ملفات WAR أو JAR): إذا كنت تريد إعادة استخدام العلامات المخصصة، فأنت بحاجة إلى طريقة لنقلها من مشروع إلى آخر. يعد تجميع مكتبة العلامات في ملف JAR طريقة بسيطة وفعالة.
6. إعلان مكتبة العلامات على صفحة JSP: إذا كنت تريد استخدام علامة مخصصة في صفحة JSP، فستحتاج إلى استخدام معرف مكتبة العلامات للإعلان عنها على الصفحة.
يبدو أن هناك الكثير من العمل الذي يتعين القيام به، وبالطبع سيكون الأمر صعبًا بعض الشيء عند البدء في استخدامه لأول مرة، لكنه ليس صعبًا للغاية. لا يتعلق الأمر بالترميز، بل يتعلق بتنظيم القطع بشكل صحيح. يعد هذا الهيكل الهرمي مهمًا لأنه يجعل استخدام العلامات مرنًا وأسهل في النقل. والأهم من ذلك، أن هذه المستويات تسمح بأتمتة عملية إنشاء مكتبة العلامات بالكامل من خلال JSP IDE (بيئة التطوير المتكاملة JSP). يمكن لـ JSP IDE إكمال معظم أعمال إنشاء العلامات المخصصة تلقائيًا، ولا يلزمك سوى أن تكون مسؤولاً عن إعداد التعليمات البرمجية ومعالجات العلامات بنفسك.
(ملاحظة: يقوم معالج العلامات بتعريف علامة مخصصة واحدة فقط؛ ومكتبة العلامات عبارة عن مجموعة من العديد من معالجات العلامات التي تتعامل مع نفس المهمة)
إنشاء علامتك الأولى
سيعلمك ما يلي خطوة بخطوة كيفية إنشاء علامة مخصصة، مثال محدد يقوم بتوسيع JSP بحيث يكون لديه وظيفة ترميز HTML الخاصة به. تستبدل هذه الميزة كافة الأحرف < و > برمز HTML. يمكن تمديده بسهولة للقيام بمعالجة الترميز الأخرى. للتبسيط، يشرح هذا المثال فقط العناصر الأساسية لإنشاء علامة مخصصة.
يجب وضعأي جزء قابل لإعادة الاستخدام من الكود
الذي ينشئ JavaBean
في JavaBean.هذا مهم جدا. بهذه الطريقة يمكنك إعادة استخدام الكود في مشاريع أخرى. نظرًا لأن أي كود يتم وضعه داخل معالج العلامات لا يمكن إعادة استخدامه خارج العلامة، فمن المهم عزل أجزاء التعليمات البرمجية القابلة لإعادة الاستخدام. في هذا المثال، يعد المنطق المشفر لـ HTML شائعًا وبالتالي يتم وضعه في JavaBean، راجع القائمة ب
القائمة ب: JavaBeans بترميز HTML
/* HTML_Format.java */
فئة عامة HTML_Format تمتد كائن تنفذ java.io.Serializable {
/** إنشاء تنسيق HTML_Format جديد */
public HTML_Format() {}
/** استبدل جميع الأحرف < و > في سلسلة بترميز HTML للاستجابة */
سلسلة HTML_Encode العامة (سلسلة as_data)
{
int li_len = as_data. length();
/*طول المخزن المؤقت للسلسلة أطول من السلسلة الأصلية*/
StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10));
/* حلقة لاستبدال جميع الأحرف < و > */
ل(int li_count = 0; li_count <li_len; li_count++)
{ String ls_next = String.valueOf(as_data.charAt(li_count));
إذا (ls_next.equals("<")) ls_next = "<";
إذا (ls_next.equals(">")) ls_next = ">";
lsb_encode.append( ls_next );
}
return( lsb_encode.toString() );
}
}
يظهر رمز إنشاء معالج العلامات في القائمة ج:
القائمة ج: معالج علامات ترميز HTML
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
يمتد فئة HTML_FormatTag العامة إلى BodyTagSupport
{
/* 1) سيتم استدعاء هذه الوظيفة في نهاية العلامة*/
public int doEndTag() يرمي JspTagException
{
يحاول
{ /* 2) احصل على النص الموجود في الملصق */
BodyContent l_tagbody = getBodyContent();
String ls_output = "";
/* 3) إذا كان نص العلامة يحتوي على نص، فقم بمعالجته */
إذا (l_tagbody != فارغة)
{ HTML_Format l_format = new HTML_Format();
/* 3أ) تحويل محتوى نص العلامة إلى سلسلة */
String ls_html_text = l_tagbody.getString();
ls_output = l_format.HTML_Encode(ls_html_text);
}
/* 4) كتابة النتائج مرة أخرى إلى دفق البيانات */
pageContext.getOut().write(ls_output.trim());
}
قبض (IOException ه)
{رمي JspTagException الجديد("خطأ في العلامة:" + e.toString());
}
/* دع JSP يستمر في معالجة محتوى الصفحات التالية*/
إرجاع EVAL_PAGE؛
}
}
هذه المعالجة بسيطة جدًا، وتتضمن ما يلي:
1. اقرأ النص الموجود بين علامتي الفتح والإغلاق
2. استدعاء وظيفة ترميز HTML
3. قم بإرجاع النتائج إلى صفحة JSP.
إنشاء واصف علامة
نحتاج إلى وصف العلامة المخصصة حتى يعرف النظام ما يجب فعله بها. لاحقة ملف الوصف هذا هي .tld. عادةً ما يتم تسمية ملف TLD على اسم معالج العلامات ويتم تخزينه في الدليل "/WEB-INF/". انظر القائمة د.
القائمة د: واصف علامة ترميز HTML <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
عامة "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd ">
<تاغليب>
<TLIBVERSION>1.0</TLIBVERSION>
<JSPVERSION>1.1</JSPVERSION>
<SHORTNAME>HTML_FormatTag</SHORTNAME>
<URI></URI>
<INFO>علامة ترميز HTML </INFO>
<TAG>
<الاسم>HTMLEncode</الاسم>
<TAGCLASS>HTML_FormatTag</TAGCLASS>
<INFO>تشفير HTML</INFO>
</TAG>
</TAGLIB>
قم بتحديث ملف Web XML
لإخبار حاوية JSP الآن بكيفية استخدام مكتبة العلامات. للقيام بذلك، تحتاج إلى تعديل ملف web.xml، وعلى وجه التحديد، تحتاج إلى إضافة مشروع taglib لتسجيل مكتبة العلامات وتعيين URI للعلامة. URI هو الفهرس الوحيد على موقع الويب الذي ينطبق على هذه العلامة المحددة. وبما أنه قد يتم استخدام العلامة على مواقع ويب مختلفة في المستقبل، فمن الأفضل استخدام عنوان URL الكامل و/أو اسم الحزمة لضمان التفرد. تم تبسيط هذا المثال، راجع القائمة E للحصول على نموذج التعليمات البرمجية.
القائمة E: تعديل ملف web.xml <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
" http://java.sun.com/j2ee/dtds/web-app_2.2.dtd ">
<WEB-APP>
<TAGLIB>
<TAGLIB-URI>
HTMLEncode
</TAGLIB-URI>
<موقع تاجليب>
/WEB-INF/HTML_FormatTag.tld
</موقع تاجليب>
</TAGLIB>
</WEB-APP>
استخدم العلامات الجديدة
بعد تعيين العلامات المخصصة، يمكنك استخدامها على صفحات JSP الخاصة بك. للقيام بذلك، ما عليك سوى استخدام أمر التوجيه taglib للإعلان عن العلامات التي تريد استخدامها على الصفحة. تتم فهرسة العلامات بواسطة URI الفريد الخاص بها، والذي يتم بعد ذلك تعيين بادئة مساحة الاسم. ليس لهذه البادئة أي معنى خاص، طالما أنها لا تتعارض مع مساحات الأسماء الأخرى، فمن الممكن أن تكون عشوائية. يرجى الاطلاع على القائمتين F وG أدناه.
القائمة F: استخدام علامة ترميز HTML<%@ taglib uri="HTMLEncode" prefix="Examples" %>
في صفحة JSP
<قبل>
<?XML:NAMESPACE PREFIX = أمثلة /><أمثلة:HTMLEncode>
<مرحبا، عينة بسيطة>
</أمثلة:HTMLEncode>
</PRE>
القائمة G: إخراج نموذج التعليمات البرمجية <مرحبًا، عينة بسيطة>
الذي يظهر على النحو التالي:
<مرحبًا، عينة بسيطة>
باستخدام هذه العلامة، قمت بتشفير كافة أكواد الصفحة. تتم معالجة كافة العلامات المخصصة على الخادم. وهذا يعني أنك لن ترى علامات مخصصة على صفحة الإخراج.
كما ترون، إنشاء العلامات ليس بالأمر الصعب. الجزء الأكثر إزعاجًا هو تعلم التفاصيل الكاملة لمعالجات العلامات. هذه ميزة قوية، وقد قمنا فقط بخدش السطح. بسبب الخطوات العديدة التي تتضمنها هذه العملية، قد يجد مبرمجو JSP الجدد الأمر مربكًا عند إنشاء العلامات.
الاستنتاج:
تعد مكتبة العلامات من أهم ميزات JSP، وهي لا تزال قيد التطوير المستمر. إنه بالفعل شيء جديد، لذا لم يتم اعتماده على نطاق واسع بعد، لكن مكتبة العلامات المخصصة جردت من غموضها، وبدأ المزيد والمزيد من المطورين في الاهتمام بها واستخدامها. في أواخر عام 2001، كان من المتوقع أن تصبح مكتبات العلامات ميزة شائعة جدًا في العديد من مشاريع JSP.
تمت مناقشة فوائد مكتبات العلامات بشكل موجز فقط في هذه المقالة. تحتوي مكتبات العلامات في الواقع على العديد من الميزات القوية الأخرى. تدفع مكتبات العلامات تطوير JSP إلى عالم جديد غير مسبوق. إنها بالفعل تقنية جديدة ومثيرة لمطوري JSP لأنهم يحصلون على أداة يمكنها تحويل JSPs إلى تطبيقات مختلفة وإنشاء أي نوع من تطبيقات الويب. تعمل مكتبة العلامات على تحويل JSP إلى أغنى إمكانيات التطوير وأكثرها ديناميكية وبيئة برمجة الويب القوية. قدراتها محدودة فقط بخيالنا وإبداعنا.