على عكس عناصر توجيه JSP، تعمل عناصر عمل JSP أثناء مرحلة معالجة الطلب. تتم كتابة عناصر عمل JSP بلغة XML.
استخدم إجراءات JSP لإدراج الملفات ديناميكيًا، وإعادة استخدام مكونات JavaBean، وإعادة توجيه المستخدمين إلى صفحات أخرى، وإنشاء تعليمات HTML البرمجية لمكونات Java الإضافية.
يوجد بناء جملة واحد فقط لعناصر الإجراء، وهو يتوافق مع معيار XML:
<jsp:action_name attribute="value" />
عناصر الإجراء هي في الأساس وظائف محددة مسبقًا. تحدد مواصفات JSP سلسلة من الإجراءات القياسية، والتي تستخدم JSP كبادئة. عناصر الإجراء القياسية المتاحة هي كما يلي:
قواعد اللغة | يصف |
---|---|
jsp:تشمل | قم باستيراد ملف عند طلب الصفحة. |
jsp:useBean | ابحث عن JavaBean أو قم بإنشاء مثيل له. |
jsp:setProperty | قم بتعيين خصائص JavaBean. |
jsp:getProperty | إخراج خصائص JavaBean. |
جسب: إلى الأمام | أرسل الطلب إلى صفحة جديدة. |
jsp: البرنامج المساعد | يُنشئ علامات OBJECT أو EMBED لمكونات Java الإضافية وفقًا لنوع المتصفح. |
jsp: العنصر | تحديد عناصر XML الديناميكية |
jsp: السمة | قم بتعيين سمات عناصر XML المحددة ديناميكيًا. |
جسب: الجسم | يضبط محتوى عنصر XML المحدد ديناميكيًا. |
جسب:نص | استخدام القوالب التي تكتب النص في صفحات ومستندات JSP |
تحتوي جميع عناصر الإجراء على سمتين: سمة المعرف وسمة النطاق.
سمة الهوية:
سمة المعرف هي المعرف الفريد لعنصر الإجراء ويمكن الرجوع إليها في صفحة JSP. يمكن استدعاء قيمة المعرف التي تم إنشاؤها بواسطة عنصر الإجراء من خلال PageContext.
سمة النطاق:
تُستخدم هذه السمة لتحديد دورة حياة عنصر الإجراء. ترتبط سمة المعرف مباشرة بسمة النطاق، وتحدد سمة النطاق عمر كائن المعرف المرتبط. تحتوي سمة النطاق على أربع قيم محتملة: (أ) الصفحة، (ب) الطلب، (ج) الجلسة، و (د) التطبيق.
يتم استخدام عنصر الإجراء <jsp:include> لتضمين الملفات الثابتة والديناميكية. يقوم هذا الإجراء بإدراج الملف المحدد في الصفحة التي يتم إنشاؤها. تنسيق بناء الجملة كما يلي:
<jsp:include page="relative URL" Flush="true" />
تم تقديم توجيه التضمين من قبل، وهو يقدم الملفات عند تحويل ملف JSP إلى Servlet. يختلف الإجراء jsp:include هنا.
فيما يلي قائمة بالخصائص المرتبطة بإجراء التضمين.
ملكية | يصف |
---|---|
صفحة | عنوان URL النسبي الموجود في الصفحة. |
دافق | خاصية منطقية تحدد ما إذا كان يجب مسح ذاكرة التخزين المؤقت قبل تضمين المورد. |
فيما يلي نحدد ملفين date.jsp و main.jsp، الكود كما يلي:
رمز ملف date.jsp:
<p> تاريخ اليوم: <%= (new java.util.Date()).toLocaleString()%></p>
كود ملف main.jsp:
<html><head><title>مثال إجراء التضمين</title></head><body><center><h2>مثال إجراء التضمين</h2><jsp:include page="date.jsp" Flush ="صحيح" /></center></body></html>
الآن ضع الملفين أعلاه في الدليل الجذر للخادم وقم بالوصول إلى الملف main.jsp. النتائج المعروضة هي كما يلي:
إجراء التضمين مثال تاريخ اليوم: 12 سبتمبر 2013 14:54:22
يتم استخدام الإجراء jsp:useBean لتحميل JavaBean الذي سيتم استخدامه في صفحة JSP.
هذه الميزة مفيدة جدًا لأنها تتيح لنا الاستفادة من إعادة استخدام مكونات Java مع تجنب فقدان الراحة التي تميز JSP عن Servlets.
أبسط بناء جملة للإجراء jsp:useBean هو:
<jsp:useBean id="name" />
بعد تحميل الفصل، يمكننا تعديل واسترجاع خصائص الحبة من خلال الإجراءات jsp:setProperty وjsp:getProperty.
فيما يلي قائمة بالخصائص المتعلقة بإجراء useBean.
ملكية | يصف |
---|---|
فصل | حدد اسم الحزمة الكاملة للفاصوليا. |
يكتب | يحدد النوع الذي سيشير إلى متغير الكائن. |
beanName | حدد اسم Bean من خلال طريقة Instantiate() الخاصة بـ java.beans.Beans. |
قبل إعطاء أمثلة محددة، دعونا نلقي نظرة أولاً على عنصري الإجراء jsp:setProperty وjsp:getProperty:
يتم استخدام jsp:setProperty لتعيين خصائص كائن Bean الذي تم إنشاء مثيل له. هناك طريقتان لاستخدامه. أولاً، يمكنك استخدام jsp:setProperty خارج (خلف) عنصر jsp:useBean، مثل هذا:
<jsp:useBean id="myName"... />...<jsp:setProperty name="myName" property="someProperty".../>
في هذا الوقت، سواء عثر jsp:useBean على Bean موجود أو أنشأ مثيل Bean جديدًا، فسيتم تنفيذ jsp:setProperty. الاستخدام الثاني هو وضع jsp:setProperty داخل عنصر jsp:useBean، كما هو موضح أدناه:
<jsp:useBean id="myName"...>... <jsp:setProperty name="myName" property="someProperty".../></jsp:useBean>
في هذا الوقت، لن يتم تنفيذ jsp:setProperty إلا عند إنشاء مثيل Bean جديد. إذا تم استخدام مثيل موجود، فلن يتم تنفيذ jsp:setProperty.
ملكية | يصف |
---|---|
اسم | سمة الاسم مطلوبة. إنه يشير إلى Bean الذي سيتم تعيين الخاصية عليه. |
ملكية | سمة الخاصية مطلوبة. فهو يشير إلى الخاصية التي سيتم تعيينها. هناك استخدام خاص: إذا كانت قيمة الخاصية هي "*"، فهذا يعني أن جميع معلمات الطلب التي تتطابق أسماؤها مع أسماء خصائص Bean سيتم تمريرها إلى طريقة مجموعة الخصائص المقابلة. |
قيمة | سمة القيمة اختيارية. يتم استخدام هذه الخاصية لتحديد قيمة خاصية Bean. سيتم تحويل بيانات السلسلة تلقائيًا إلى أرقام ومنطقية ومنطقية وبايت وبايت وشار وحرف من خلال طريقة القيمة القياسية في الفئة المستهدفة. على سبيل المثال، يتم تحويل قيم سمات النوع المنطقي والمنطقي (مثل "true") بواسطة Boolean.valueOf، ويتم تحويل قيم سمات النوع int وInteger (مثل "42") بواسطة Integer.valueOf. لا يمكن استخدام القيمة والمعلمة في نفس الوقت، ولكن يمكن استخدام أي منهما. |
المعلمة | المعلمة اختيارية. وهو يحدد معلمة الطلب التي سيتم استخدامها كقيمة لخاصية Bean. إذا لم يكن الطلب الحالي يحتوي على معلمات، فلن يتم فعل أي شيء، ولن يمرر النظام قيمة فارغة إلى الطريقة المحددة لخاصية Bean. لذلك، يمكنك السماح للفاصوليا بتوفير قيمة الخاصية الافتراضية نفسها، وتعديل قيمة الخاصية الافتراضية فقط عندما تحدد معلمة الطلب قيمة جديدة بشكل صريح. |
يستخرج الإجراء jsp:getProperty قيمة خاصية Bean المحددة، ويحولها إلى سلسلة، ثم يقوم بإخراجها. تنسيق بناء الجملة كما يلي:
<jsp:useBean id="myName"... />...<jsp:getProperty name="myName" property="someProperty".../>
الجدول التالي هو الخصائص المرتبطة بـ getProperty:
ملكية | يصف |
---|---|
اسم | اسم خاصية Bean المراد استردادها. يجب تعريف الفول. |
ملكية | يشير إلى أنه سيتم استخراج قيمة خاصية Bean |
في الأمثلة التالية نستخدم Beans:
/* الملف: TestBean.java */package action; public class TestBean { Private String message = "لم يتم تحديد رسالة"; public String getMessage() { return(message } public void setMessage(String message) { this.message = رسالة؛ }}
قم بتجميع المثال أعلاه وإنشاء ملف TestBean.class. انسخ الملف إلى الدليل حيث يقوم الخادم بتخزين فئات Java رسميًا، بدلاً من الدليل المحجوز للفئات التي يمكن تحميلها تلقائيًا بعد التعديل (مثل: C:Apache-tomcat). -7.0.2 webappsWEB-INFclassesaction الدليل، يجب أن يحتوي متغير CLASSPATH على هذا المسار). على سبيل المثال، بالنسبة لـ Java Web Server، يجب وضع الفاصوليا وجميع الفئات التي تستخدمها الفاصوليا في دليل الفئات، أو تغليفها في ملفات jar ووضعها في دليل lib، ولكن لا ينبغي وضعها تحت servlets. ما يلي هو مثال بسيط للغاية، وتتمثل وظيفته في تحميل Bean ثم تعيين/قراءة خاصية الرسالة الخاصة به.
الآن دعونا نستدعي الحبة في ملف main.jsp:
<html><head><title>استخدام JavaBeans في JSP</title></head><body><center><h2>استخدام JavaBeans في JSP</h2> <jsp:useBean id="test" /> < jsp:setProperty name="test" property="message" value="Hello JSP..." /> <p>حصلت على الرسالة....</p> <jsp:getProperty name="test" property="message " /> </center></body></html>
قم بتنفيذ الملف أعلاه وستكون النتيجة كما يلي:
استخدام JavaBeans في رسالة JSPGot....Hello JSP...
يقوم الإجراء jsp:forward بإعادة توجيه الطلب إلى صفحة أخرى. تحتوي العلامة jsp:forward على سمة واحدة فقط، وهي الصفحة. تنسيق بناء الجملة كما يلي:
<jsp:forward page="Relative URL" />
فيما يلي السمات المرتبطة للأمام:
ملكية | يصف |
---|---|
صفحة | تحتوي سمة الصفحة على عنوان URL نسبي. يمكن إعطاء قيمة الصفحة بشكل مباشر أو ديناميكي أثناء الطلب، ويمكن أن تكون صفحة JSP أو Java Servlet. |
نستخدم ملفين في الأمثلة التالية: date.jsp وmain.jsp.
رمز ملف date.jsp هو كما يلي:
<p> تاريخ اليوم: <%= (new java.util.Date()).toLocaleString()%></p>
كود ملف main.jsp:
<html><head><title>مثال الإجراء الأمامي</title></head><body><center><h2>مثال الإجراء الأمامي</h2><jsp:forward page="date.jsp" / </سنتر></بودي>
الآن ضع الملفين أعلاه في الدليل الجذر للخادم وقم بالوصول إلى الملف main.jsp. النتائج المعروضة هي كما يلي:
تاريخ اليوم: 12-سبتمبر-2010 14:54:22
يتم استخدام الإجراء jsp:plugin لإدراج عناصر OBJECT أو EMBED الضرورية لتشغيل Java Applet من خلال مكون Java الإضافي، اعتمادًا على نوع المتصفح.
إذا لم يكن المكون الإضافي المطلوب موجودًا، فسيتم تنزيل المكون الإضافي ثم تنفيذ مكون Java. يمكن أن يكون مكون Java برنامجًا صغيرًا أو JavaBean.
يحتوي إجراء البرنامج المساعد على سمات متعددة تتوافق مع عناصر HTML المستخدمة لتنسيق مكونات Java. يمكن استخدام العنصر param لتمرير المعلمات إلى Applet أو Bean.
فيما يلي مثال نموذجي لاستخدام عنصر إجراء المكون الإضافي:
<jsp:plugin type = "applet" codebase = "dirname" code = "MyApplet.class" > <jsp:param name = "fontcolor" value = "red" /> <jsp:param name = "background" value = " black" /> <jsp:fallback> غير قادر على تهيئة مكون Java الإضافي </jsp:fallback> </jsp:plugin>
إذا كنت مهتمًا، يمكنك تجربة استخدام برنامج صغير لاختبار عنصر الإجراء jsp:plugin، ويعتبر العنصر <fallback> عنصرًا جديدًا. وعندما يفشل المكون، يتم إرسال رسالة خطأ إلى المستخدم.
<jsp:element>، <jsp:attribute>، <jsp:body> تحدد عناصر الإجراء عناصر XML ديناميكيًا. تعتبر الديناميكية مهمة جدًا، مما يعني أن عناصر XML يتم إنشاؤها ديناميكيًا في وقت الترجمة وليس بشكل ثابت.
يحدد المثال التالي عناصر XML ديناميكيًا:
<%@page language="java" contentType="text/html"%><html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun. com/JSP/Page"><head><title>إنشاء عنصر XML</title></head><body><jsp:element name="xmlElement"><jsp:attribute name="xmlElementAttr"> قيمة السمة</jsp:attribute><jsp:body> النص الأساسي لعنصر XML</jsp:body></jsp:element></body></html>
كود HTML الذي تم إنشاؤه أثناء التنفيذ هو كما يلي:
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>إنشاء عنصر XML</ title></head><body><xmlElement xmlElementAttr="قيمة السمة"> النص الأساسي لعنصر XML</xmlElement></body></html>
يسمح عنصر الإجراء <jsp:text> باستخدام القوالب لكتابة النص في صفحات ومستندات JSP. ويكون تنسيق بناء الجملة كما يلي:
<jsp:text>بيانات القالب</jsp:text>
لا يمكن أن يحتوي قالب النص أعلاه على عناصر أخرى، ولكن يمكن أن يحتوي فقط على نص وتعبيرات EL (ملاحظة: سيتم تقديم تعبيرات EL في الفصول اللاحقة). يرجى ملاحظة أنه في ملفات XML لا يمكنك استخدام تعبيرات مثل ${whatever > 0} لأن الرمز > غير قانوني. يمكنك استخدام التعبير ${whatever gt 0} أو القيمة المضمنة في قسم CDATA.
<jsp:text><![CDATA[<br>]]></jsp:text>
إذا كنت بحاجة إلى إعلان DOCTYPE في XHTML، فيجب عليك استخدام عنصر الإجراء <jsp:text>، والمثال على ذلك هو كما يلي:
<jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">]]></jsp:text>< head><title>jsp:text action</title></head><body><books><book><jsp:text> مرحبًا بك في JSP البرمجة</jsp:text></book></books></body></html>
يمكنك تجربة المثال أعلاه لمعرفة الفرق في نتائج التنفيذ باستخدام <jsp:text> وعدم استخدام عنصر الإجراء هذا.