نعلم جميعًا أن هناك شكلين من أشكال التضمين في jsp، وهما
<%@ تضمين الملف=” ”%>
<jsp:include page=” “flush=”true”/></P>
فالأول عنصر تعليمي والثاني عنصر سلوكي. أين سيتم استخدامها بالضبط؟ كيفية استخدامها وما هو الفرق؟ يجب أن يكون هذا سؤالًا سيفكر فيه الكثير من الناس عندما يرونه. دعونا نلقي نظرة أدناه. </ف>
عادةً عندما تكون أجزاء معينة من جميع الصفحات في التطبيق (مثل العناوين والتذييلات وأشرطة التنقل) متماثلة، يمكننا التفكير في استخدام التضمين. على وجه التحديد، متى يتم استخدام <%@ include file=""%>، ومتى يتم استخدام <jsp:include page="" Flush="true"/> في هذا النموذج. أول شيء يجب فهمه هو الفرق بينهما. فقط من خلال فهم الاختلافات في استخدامها يمكنك فهم متى تستخدمها وكيفية اختيارها.
<%@ include file=" "%>, يقرأ عنصر توجيه التضمين jsp محتوى الصفحة المحددة. ودمج هذه المحتويات مع الصفحة الأصلية. (يتم تنفيذ هذه العملية أثناء مرحلة الترجمة: أي المرحلة التي يتم فيها تحويل jsp إلى servlet.</P>
فيما يلي شرح لمرحلة الترجمة: نعلم أنه لا يمكن إرسال صفحة jsp إلى المتصفح سليمة، ويجب أولاً معالجة جميع عناصر jsp بواسطة الخادم. يتم ذلك عن طريق تحويل صفحة jsp إلى servlet ثم تنفيذ servlet. يحتاج الخادم إلى حاوية jsp لمعالجة صفحات jsp. عادةً ما يتم تنفيذ حاوية jsp في شكل servlet. تم تكوين هذا servlet للتعامل مع جميع طلبات صفحات jsp. </ف>
حاوية Jsp مسؤولة عن تحويل صفحة jsp إلى servlet (تسمى فئة تنفيذ صفحة jsp؟ فئة تنفيذ صفحة JSP) وتجميع هذا servlet. وتشكل هاتان الخطوتان مرحلة الترجمة.</P>
من هذا سنعرف: تضيف صفحة jsp المحتوى الفعلي (أي مقتطف التعليمات البرمجية) للصفحة المحددة بواسطة عنصر توجيه التضمين إلى صفحة jsp التي تقدمه، بعد تجميعه في ملف، يتم تحويله إلى ملف servlet بواسطة حاوية jsp. يمكنك أن ترى أنه سيتم إنشاء ملف فئة مؤقت وملف جافا في هذا الوقت. هنا مثال. </ف>
يستخدم الخادم Tomcat، ويسمى ملف jsp الذي تم إدخاله في الصفحة test.jsp. تسمى الصفحة المستوردة date.jsp. يقوم ملف jsp هذا بتخزين رمز jsp مرتبط بالوقت، ويتم تعيين جذر السياق الحالي للاختبار.
//======الملف المصدر للتاريخ.jsp======//
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
سلسلة date_cn = ""؛
سلسلة dateStr = "";
التبديل (date.getDay ())
{
الحالة 0:date_cn = "استراحة اليوم"؛
الحالة 1:date_cn = "一";
الحالة 2:date_cn = "二"؛
الحالة 3:date_cn = "三";
الحالة 4:date_cn = "四"؛
الحالة 5:date_cn = "五";
الحالة 6:date_cn = "六"؛
}
dateStr = (1900+date.getYear()) + "السنة" + (date.getMonth()+1) + "الشهر" + date.getDate() + "اليوم (أيام الأسبوع) + date_cn + ")";
%>
document.write("<%=dateStr%>");
//====== فيما يلي الملف المصدر لـ test.jsp=============//
<%@ لغة الصفحة=”Java” contentType=”text/html;charset=gb2312”%>
<أتش تي أم أل>
<الرأس>
<title>استخدامان للتضمين</title>
<jsp:include page=”date.jsp”flush=”true”/>
<%--@ include file=”date.jsp” %-->
// نستخدم نموذجين مختلفين من التضمين هنا لتقديم ملف date.jsp.
<الرأس>
<الجسم>
<الجدول><tr><td>
يرجى الانتباه إلى استخدامي التضمين في jsp.
</td></tr></table>
</الجسم>
</html></P>
في ملف test.jsp، نخرج فقط سطرًا من النص "حول استخدامين للتضمين في jsp. يرجى الانتباه." الآن دعونا نستخدم النموذج <%@ include file="date.jsp" %> لتقديم ملف date.jsp. هل تعتقد أنه يمكن أن يحدث خطأ ما؟ تظهر رسالة خطأ في هذا الوقت:
حالة HTTP 500؟
org.apache.jasper.JasperException: /date.jsp(0,0) توجيه الصفحة: لا يمكن أن يحتوي على تكرارات متعددة لـ contentType
هناك مجموعة من الأخطاء أدناه، ولكننا نحتاج فقط إلى إلقاء نظرة عليها لمعرفة أين تكمن المشكلة. رمز الحالة هو http 500 خطأ داخلي في الخادم. ألق نظرة أخرى على النصائح أدناه. لا يمكن تحديد أنواع محتوى متعددة في صفحة date.jsp.</P>
هذا هو السبب. وذلك لأنه أثناء مرحلة الترجمة، تمت إضافة كود ملف date.jsp إلى صفحة test.jsp سليمة لتجميع الملف. سيكون الملف المركب هو نفسه:
<%@ لغة الصفحة=”Java” contentType=”text/html;charset=gb2312”%>
هذا الرمز. الحل هو حذف هذه الجملة من ملف date.jsp. قم بالتحديث ثم اطلب صفحة test.jsp</P>
يتم عرض الطلب test.jsp على الصفحة كما يلي
10 ديسمبر 2003 13:12:40
يرجى الانتباه إلى استخدامي التضمين في jsp. </ف>
لا يمكننا العثور على أي شيء بعد. دعونا نتحقق من الملفات المؤقتة ضمن Tomcat. اذهب إلى هناك وتأكد من إضافة محتويات ملف date.jsp إلى ملف test.jsp.
<ملاحظة: تم تثبيت القط هنا في الدليل الجذر لمحرك الأقراص E>
جدول المحتويات
E:tomcatworkStandalonelocalhosttest.
في هذا الدليل سوف ترى
يوجد ملفان test_jsp.java وtest_jsp.class. </ف>
ملف Java هنا هو ملف test_jsp.java الذي تم الحصول عليه عن طريق تحويل jsp إلى servlet بواسطة حاوية jsp. </ف>
الملف test_jsp.class المقابل هو ملف الفئة الذي تم إنشاؤه عن طريق تجميع ملف test_jsp.java servlet. افتح ملف servlet الذي تم إنشاؤه (test_jsp.java). في هذه المرحلة، سنجد أنه عند تحويل ملف test.jsp إلى ملف servlet، تتم إضافة بعض التعليمات البرمجية غير الموجودة في صفحة test.jsp بين المخرجات <haed> والمحتوى المضاف حديثًا هو الكود الموجود في التاريخ. jsp: يرجى الاختبار ومعرفة المحتوى الجديد الذي تمت إضافته أو ما إذا كان قد تم بالفعل إضافة محتوى جديد في لمحة سريعة.</P>
ما ورد أعلاه هو النتيجة التي حصلنا عليها باستخدام النموذج <%@ include file="date.jsp"%>.
بعد ذلك، نستخدم <jsp:include page="dae.jsp" Flush="true"/>، أي،
استبدل <%@ include file="date.jsp"%> بـ <jsp:include page="dae.jsp" Flush="true"/>، ثم اطلب test.jsp.
2003 12 10 13:30:13
يرجى الانتباه إلى استخدامي التضمين في jsp. </ف>
في هذا الوقت، سترى على الصفحة أن الأحرف الصينية في التاريخ الناتج بواسطة date.jsp التي قدمناها مشوهة، ما هو السبب؟ تحتاج إلى شرح مرحلة معالجة الطلب، بالإضافة إلى كونها مسؤولة عن تحويل صفحات jsp إلى servlets كما هو مذكور أعلاه، فإن حاوية Jsp مسؤولة أيضًا عن استدعاء فئة تنفيذ صفحة jsp لمعالجة كل طلب وإنشاء استجابة مرحلة معالجة الطلب (مرحلة معالجة الطلب هي تنفيذ ملف الفئة فقط). </ف>
لذلك عندما نقدم عنصر إجراء التضمين في الصفحة، فإننا في الواقع نشير فقط إلى ملف فئة servlet الذي تم إنشاؤه بعد تحويل وتجميع ملف date.jsp. في هذه الحالة، يتم اختبار date.jsp كملف منفصل بعد التنفيذ يتم استدعاؤه عند تشغيل الملف .jsp نظرًا لعدم تحديد ترميز الأحرف في الملف date.jsp، تظهر الأحرف المشوشة. ويكون الحل هو إعادة استبدال الأحرف التي تمت إزالتها للتو في الملف date.jsp.
<%@ لغة الصفحة=”Java” contentType=”text/html;charset=gb2312”%>
بعد إضافة سطر البيان هذا، قم بالتحديث وإعادة التشغيل. في هذا الوقت، يتم عرض الصفحة بشكل صحيح، كما هو الحال عند التشغيل بشكل طبيعي مع توجيه التضمين. إذا نظرت إلى الملفات المؤقتة ضمن Tomcat، فستجد ذلك هناك هو ملف date_jsp.java وملفات date_jsp.class، ويتم الحصول على هذين الملفين بنفس الطريقة التي يتم بها الحصول على ملفي test_jsp.java وtest_jsp.class. ستجد أنه تمت إضافة سطر جديد فقط من التعليمات البرمجية في هذا الوقت:
JspRuntimeLibrary.include(request, Response, "date.jsp", out, true);</P>
ولا يضيف رمز ملف date.jsp إلى test.jsp.</P>
إنه يقدم فقط الاستجابة التي تم إنشاؤها بعد تنفيذ صفحة date.jsp في وقت التشغيل. وهذا يعني أنه يمكننا تحديد أي مورد ويب يمكنه إنشاء استجابة (مثل servlet أو صفحة jsp)، طالما كانت الأنواع التي تم إنشاؤها بواسطة هذه الاستجابة. الموارد هي نفس jsp، نوع المحتوى الذي تم إنشاؤه بواسطة الصفحة هو نفسه، وستقوم حاوية JSP بتنفيذ المورد المحدد من خلال استدعاء وظيفة داخلية، لذلك يمكن أن تساعد هذه الموارد المستوردة في معالجة الطلب الأصلي، بحيث يمكن لهذه الموارد الوصول إلى جميع الكائنات في نطاق الطلب وجميع معلمات الطلب الأصلي.</P>
نظرًا لأن هذه الصفحات لم يتم تقديمها بعد إلى الصفحة الرئيسية عند طلب الصفحة الرئيسية، فيمكنك استخدام قيمة سمة وقت الطلب لسمة الصفحة لتحديد الصفحة التي سيتم تقديمها بناءً على حالة وقت التشغيل. يمكنك أيضًا إضافة بعض الطلبات المعلمات التي سيتم قراءتها بواسطة الصفحة الواردة.
<jsp:تضمين الصفحة = "<%=pageSelectedAtRuntime%>" Flush="true" >
<jsp:param name=”fitstParamer” value=”firstvalue”>
<jsp:param name=”lastParamer” value=”lastvalue”>
</jsp:تشمل></P>
إذا تم تعديل صفحة jsp المستوردة، فيمكن استخدام أحدث إصدار من الصفحة على الفور، وذلك لأن الصفحة المستوردة يتم التعامل معها بنفس الطريقة التي يتم بها استدعاء صفحة jsp مباشرة بواسطة المتصفح، أي أن الحاوية تكتشف تغييرات الصفحة , والدخول تلقائيًا إلى مرحلة الترجمة للحصول على أحدث إصدار من الصفحة.</P>
(لاحظ أن عنصر سلوك التضمين هو نفس عناصر jsp الأخرى. إذا لم يكن هناك نص سلوك، فيجب أن ينتهي بـ "/". تمامًا كما يلي.
<jsp:include page="<%=pageSelectedAtRuntime%>" Flush="true" />)</P>
فيما يلي الفرق بين استخدامي التضمين. هناك اختلافان رئيسيان؛
1: وقت التنفيذ:
يتم تنفيذ <%@ include file=”relativeURI”%> أثناء مرحلة الترجمة
يتم تنفيذ <jsp:include page="relativeURI" Flush="true" /> أثناء مرحلة معالجة الطلب.
2: الاختلافات في المحتوى المقدم:
<%@ تضمين الملف =”relativeURI”%>
قم بتقديم نص ثابت (html، jsp) ودمجه مع صفحة JSP قبل تحويله إلى servlet.
<jsp:include page="relativeURI" Flush="true" />يقدم نص الاستجابة الذي تم إنشاؤه بواسطة صفحة التنفيذ أو servlet.
أيضًا في كلا الاستخدامين، يتم تفسير سمات الملف والصفحة على أنها URI نسبي، إذا كان يبدأ بشرطة مائلة، فسيتم تفسيره وفقًا للبادئة المعينة لمعرف URI الخاص بالتطبيق لا يبدأ بشرطة مائلة، فهو مسار متعلق بالصفحة، وسيتم تفسيره وفقًا لمسار الصفحة التي تم تقديم هذا الملف فيها. لمزيد من المعلومات حول كيفية تفسير عناوين URL، يرجى الرجوع إلى المواد ذات الصلة كتب.