توجيهات JSP
ما هي توجيهات JSP؟
- توجيهات JSP هي الرسائل المرسلة إلى حاوية JSP. أنها توفر معلومات عالمية حول صفحة JSP بأكملها.
- تُستخدم توجيهات JSP لإعطاء تعليمات خاصة للحاوية لترجمة JSP إلى كود servlet.
- في مرحلة دورة حياة JSP، يجب تحويل JSP إلى servlet وهي مرحلة الترجمة.
- أنها تعطي تعليمات للحاوية حول كيفية التعامل مع جوانب معينة من معالجة JSP
- يمكن أن تحتوي التوجيهات على العديد من السمات مفصولة بفواصل كأزواج قيمة المفتاح.
- في JSP، يتم وصف التوجيه في
<%@ %>
العلامات.
بناء جملة التوجيه:
<%@ directive attribute="" %>
أنواع التوجيهات في JSP
هناك ثلاثة أنواع من التوجيهات في JSP:
- توجيه الصفحة
- تضمين التوجيه
- توجيه تاجليب
يتم وصف كل واحد منهم بالتفصيل أدناه مع الأمثلة:
1) توجيه صفحة JSP
بناء جملة توجيه الصفحة:
<%@ page…%>
- يوفر سمات يتم تطبيقها على صفحة JSP بأكملها.
- إنه يقوم بتعريف السمات المعتمدة على الصفحة، مثل لغة البرمجة، وصفحة الخطأ، ومتطلبات التخزين المؤقت.
- يتم استخدامه لتوفير الإرشادات للحاوية التي تتعلق بصفحة JSP الحالية.
وفيما يلي قائمة السمات المرتبطة بتوجيه الصفحة:
- اللغة
- يمتد
- استيراد
- نوع المحتوى
- info
- الجلسة
- com.isThreadSafe
- التنظيف التلقائي
- العازلة
- IsErrorPage
- pageEncoding
- صفحة الخطأ
- isELIgonored
مزيد من التفاصيل حول كل سمة
1) اللغة: ويحدد لغة برمجة (اللغة الأساسية) المستخدمة في الصفحة.
تركيب اللغة:
<%@ page language="value" %>
القيمة هنا هي لغة البرمجة (اللغة الأساسية)
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
شرح الكود: في المثال أعلاه، قيمة لغة السمة هي Java وهي اللغة الأساسية في هذه الحالة. ومن ثم، سيتم تجميع التعليمات البرمجية الموجودة في علامات التعبير باستخدام مترجم جافا.
2) يمتد: يتم استخدام هذه السمة لتوسيع (وراثة) الفصل كما تفعل JAVA
بناء جملة الامتدادات:
<%@ page extends="value" %>
تمثل القيمة هنا الفئة التي يجب توريثها منها.
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page extends="demotest.DemoClass" %>
شرح الكود: في الكود أعلاه، يقوم JSP بتوسيع DemoClass الموجود ضمن الحزمة التجريبية، وسيقوم بتوسيع جميع ميزات الفصل.
3) الاستيراد: هذه السمة هي السمة الأكثر استخدامًا في سمات توجيه الصفحة. يتم استخدامها لإخبار الحاوية باستيراد فئات جافا وواجهات وتعدادات أخرى وما إلى ذلك أثناء إنشاء كود servlet. وهي تشبه عبارات الاستيراد في فئات جافا وواجهات.
بناء جملة الاستيراد:
<%@ page import="value" %>
تشير القيمة هنا إلى الفئات التي يجب استيرادها.
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.Date" pageEncoding="ISO-8859-1"%>
شرح الكود:
في الكود أعلاه، نقوم باستيراد فئة Date من حزمة java.util (جميع فئات الأدوات المساعدة)، ويمكنها استخدام جميع طرق الفئة التالية.
4) نوع المحتوى:
- فهو يحدد نظام ترميز الأحرف، أي أنه يستخدم لتعيين نوع المحتوى ومجموعة الأحرف الخاصة بالاستجابة
- النوع الافتراضي لـ contentType هو
"text/html; charset=ISO-8859-1"
.
بناء جملة المحتوى:
<%@ page contentType="value" %>
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
شرح الكود:
في الكود أعلاه، يتم تعيين نوع المحتوى كنص/html، ويقوم بتعيين ترميز الأحرف لـ JSP ولصفحة الاستجابة التي تم إنشاؤها.
5) معلومات
- فهو يحدد سلسلة يمكن الوصول إليها عن طريق طريقة getServletInfo().
- يتم استخدام هذه السمة لتعيين وصف servlet.
بناء جملة المعلومات:
<%@ page info="value" %>
هنا، تمثل القيمة معلومات servlet.
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" info="Guru Directive JSP" pageEncoding="ISO-8859-1"%>
شرح الكود:
في الكود أعلاه، يمكن استرداد السلسلة "Guru Directive JSP" من خلال واجهة servlet باستخدام getServletInfo()
6) الجلسة
- تقوم صفحة JSP بإنشاء الجلسة بشكل افتراضي.
- في بعض الأحيان لا نحتاج إلى إنشاء جلسة في JSP، وبالتالي، يمكننا تعيين هذه السمة على false في هذه الحالة. القيمة الافتراضية لسمة الجلسة هي true، ويتم إنشاء الجلسة. عندما يتم تعيينها على false، يمكننا أن نشير إلى المترجم بعدم إنشاء الجلسة افتراضيًا.
بناء جملة الجلسة:
<%@ page session="true/false"%>
هنا في هذه الحالة يمكن ضبط سمة الجلسة على صواب أو خطأ
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="false"%>
شرح الكود:
في المثال أعلاه، تم تعيين سمة الجلسة على "خطأ" وبالتالي نشير إلى أننا لا نريد إنشاء أي جلسة في JSP هذا
7) هو ThreadSafe:
- إنه يحدد نموذج الترابط لـ servlet الذي تم إنشاؤه.
- يشير إلى مستوى أمان الموضوع المطبق في الصفحة.
- القيمة الافتراضية لها هي true لذا فهي متزامنة
- يمكننا استخدام هذه السمة لتنفيذ واجهة SingleThreadModel في servlet الذي تم إنشاؤه.
- إذا قمنا بتعيينه على خطأ، فسوف يقوم بتنفيذ SingleThreadModel ويمكنه الوصول إلى أي كائنات مشتركة ويمكن أن يؤدي إلى عدم الاتساق.
بناء جملة isThreadSafe:
<% @ page isThreadSafe="true/false" %>
هنا يمثل true أو false ما إذا كان المزامنة موجودة ثم يتم تعيينها على true وتعيينها على false.
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isThreadSafe="true"%>
شرح الكود:
في الكود أعلاه، تم تعيين isThreadSafe على "true" وبالتالي سيتم إجراء المزامنة، ويمكن استخدام خيوط متعددة.
8) التدفق التلقائي:
تحدد هذه الخاصية ما إذا كان يجب مسح الناتج المخزن مؤقتًا تلقائيًا أم لا، والقيمة الافتراضية لهذه الخاصية هي true. إذا تم تعيين القيمة على false، فلن يتم مسح المخزن المؤقت تلقائيًا، وإذا كان ممتلئًا، فسنحصل على استثناء. عندما لا يكون المخزن المؤقت موجودًا، فإن القيمة false تكون غير شرعية، ولا يوجد تخزين مؤقت، لذا سيتم مسحه تلقائيًا.
بناء جملة autoFlush:
<% @ page autoFlush="true/false" %>
هنا يمثل "صحيح/خطأ" ما إذا كان يجب إجراء التخزين المؤقت أم لا
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" autoFlush="false"%>
شرح الكود:
في الكود أعلاه، تم تعيين التنظيف التلقائي على False وبالتالي لن يتم إجراء التخزين المؤقت وسيتم تنظيف الإخراج يدويًا.
9) Buffer:
- باستخدام هذه الخاصية، قد يتم تخزين كائن استجابة الإخراج مؤقتًا.
- يمكننا تحديد حجم التخزين المؤقت الذي سيتم إجراؤه باستخدام هذه الخاصية والحجم الافتراضي هو 8 كيلوبايت.
- يوجه servlet لكتابة المخزن المؤقت قبل الكتابة إلى كائن الاستجابة.
بناء جملة المخزن المؤقت:
<%@ page buffer="value" %>
هنا تمثل القيمة حجم المخزن المؤقت الذي يجب تحديده. إذا لم يكن هناك مخزن مؤقت، فيمكننا الكتابة على أنه لا يوجد، وإذا لم نذكر أي قيمة، فإن القيمة الافتراضية هي 8 كيلوبايت
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" buffer="16KB"%>
شرح الكود:
في الكود أعلاه، تم ذكر حجم المخزن المؤقت على أنه 16 كيلوبايت حيث سيكون المخزن المؤقت بهذا الحجم
10) صفحة الخطأ:
- يشير ذلك إلى أنه سيتم فحص صفحة JSP التي تحتوي على صفحة خطأ في صفحة JSP أخرى
- أي ملف JSP تم الإعلان عنه بالسمة "isErrorPage" يكون قادرًا بعد ذلك على تلقي استثناءات من صفحات JSP الأخرى التي تحتوي على صفحات خطأ.
- الاستثناءات متاحة لهذه الصفحات فقط.
- القيمة الافتراضية هي كاذبة.
بناء جملة isErrorPage:
<%@ page isErrorPage="true/false"%>
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isErrorPage="true"%>
شرح الكود:
في الكود أعلاه، تم تعيين isErrorPage على أنه صحيح. ومن ثم، فإنه سيتحقق من أن أي JSPs آخر يحتوي على مجموعة سمات errorPage (الموصوفة في السمة التالية) ويمكنه التعامل مع الاستثناءات.
11) ترميز الصفحة:
تحدد سمة "pageEncoding" ترميز الأحرف لصفحة JSP. يتم تحديد الإعداد الافتراضي على أنه "ISO-8859-1" إذا لم يتم تحديد أي ترميز آخر.
بناء جملة ترميز الصفحة:
<%@ page pageEncoding="vaue" %>
تحدد القيمة هنا قيمة مجموعة الأحرف لـ JSP
على سبيل المثال:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isErrorPage="true"%>
شرح الكود:
في الكود أعلاه تم ضبط "pageEncoding" على مجموعة الأحرف الافتراضية ISO-8859-1
12) صفحة الخطأ:
يتم استخدام هذه السمة لتعيين صفحة الخطأ لصفحة JSP إذا قام JSP بطرح استثناء ثم يقوم بإعادة التوجيه إلى صفحة الاستثناء.
بناء جملة صفحة الخطأ:
<%@ page errorPage="value" %>
تمثل القيمة هنا قيمة صفحة الخطأ JSP
على سبيل المثال:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" errorPage="errorHandler.jsp"%>
شرح الكود:
في الكود أعلاه، للتعامل مع الاستثناءات لدينا errroHandler.jsp
13) تم تجاهله:
- IsELIgnored هي سمة علامة حيث يتعين علينا أن نقرر ما إذا كنا سنتجاهل علامات EL أم لا.
- نوع البيانات الخاص به هو Java enum، والقيمة الافتراضية خاطئة وبالتالي يتم تمكين EL افتراضيًا.
بناء جملة isELIgnored:
<%@ page isELIgnored="true/false" %>
هنا، يمثل true/false قيمة EL سواء كان يجب تجاهلها أم لا.
على سبيل المثال:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="true"%>
شرح الكود:
في الكود أعلاه، يكون isELIgnored صحيحًا وبالتالي لغة التعبير (EL) يتم تجاهل هذا هنا. في المثال أدناه، نستخدم أربع سمات (سطر التعليمات البرمجية 1-2)
مثال مع أربع سمات
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="false"%> <%@page import="java.util.Date" %> <!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>Directive Guru JSP1</title> </head> <body> <a>Date is:</a> <%= new java.util.Date() %> </body> </html>
شرح الكود:
سطر الكود 1-2: لقد حددنا هنا أربع سمات أي
- اللغة: تم تعيينها كـ Java كلغة برمجة
- contentType: قم بتعيينه كنص/html لإخبار المترجم بأن تنسيق html يجب أن يكون
- pageEncoding: يتم تعيين مجموعة الأحرف الافتراضية في هذه السمة
- isELIgnored: علامة التعبير خاطئة وبالتالي لا يتم تجاهلها
سطر الكود 3: لقد استخدمنا هنا سمة الاستيراد، وهي تقوم باستيراد "فئة التاريخ" التي تأتي من Java util، ونحن نحاول عرض التاريخ الحالي في الكود.
عند تنفيذ الكود أعلاه، سوف تحصل على الناتج التالي
الناتج:
- التاريخ هو: التاريخ الحالي باستخدام طريقة التاريخ لفئة التاريخ
2) توجيه تضمين JSP
- يتم استخدام JSP "include directive" (codeline 8) لتضمين ملف واحد إلى ملف آخر
- يمكن أن يكون هذا الملف المضمن HTML أو JSP أو ملفات نصية وما إلى ذلك.
- كما أنه مفيد في إنشاء قوالب مع مشاهدات المستخدم وتقسيم الصفحات إلى إجراءات رأس وتذييل وشريط جانبي.
- ويشمل الملف أثناء مرحلة الترجمة
بناء جملة التوجيه المتضمن:
<%@ include….%>
على سبيل المثال:
Directive_jsp2.jsp (الملف الرئيسي)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ include file="directive_header_jsp3.jsp" %> <!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>Guru Directive JSP2</title> </head> <body> <a>This is the main file</a> </body> </html>
Directive_header_jsp3.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"> </head> <body> <a>Header file : </a> <%int count =1; count++; out.println(count);%> : </body> </html>
شرح الكود:
Directive_jsp2.jsp:
سطر الكود 3: في هذا الكود، نستخدم علامات التضمين حيث نقوم بتضمين الملف directive_header_jsp3.jsp في الملف الرئيسي (_jsp2.jsp) ونحصل على مخرجات كل من الملف الرئيسي والملف المضمن.
Directive_header_jsp3.jsp:
سطر الكود 11-12: لقد أخذنا عددًا متغيرًا تمت تهيئته إلى 1 ثم قمنا بزيادته. سيعطي هذا الإخراج في الملف الرئيسي كما هو موضح أدناه.
عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي:
الإخراج:
- الإخراج هو ملف الرأس: 2: هذا هو الملف الرئيسي
- يتم تنفيذ الإخراج من ملف directive_jsp2.jsp بينما سيتم تجميع الملف المضمن directive_header_jsp3.jsp أولاً.
- بعد الانتهاء من تضمين الملف، يتم تنفيذ الملف الرئيسي، وسيكون الإخراج من الملف الرئيسي “هذا هو الملف الرئيسي”. لذلك سوف تحصل على الإخراج كـ "ملف الرأس: 2" من _jsp3.jsp و "هذا هو الملف الرئيسي" من _jsp2.jsp.
3) توجيه JSP Taglib
- يتم استخدام توجيه JSP taglib لتحديد مكتبة العلامات باستخدام "taglib" كبادئة، والتي يمكننا استخدامها في JSP.
- سيتم تغطية المزيد من التفاصيل في قسم العلامات المخصصة لـ JSP
- يتم استخدام توجيه JSP taglib في صفحات JSP باستخدام مكتبات العلامات القياسية JSP
- ويستخدم مجموعة من العلامات المخصصة، ويحدد موقع المكتبة ويوفر وسيلة لتحديد العلامات المخصصة في صفحة JSP.
بناء جملة التوجيه taglib:
<%@ taglib uri="uri" prefix="value"%>
تعتبر سمة "uri" هنا معرفًا فريدًا في واصف مكتبة العلامات وسمة "البادئة" هي اسم علامة.
على سبيل المثال:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="gurutag" 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>Guru Directive JSP</title> <gurutag:hello/> </head> <body> </body> </html>
شرح الكود:
سطر الكود 3: هنا يتم تعريف "taglib" بسمات uri والبادئة.
سطر الكود 9: "gurutag" هي العلامة المخصصة المحددة ويمكن استخدامها في أي مكان