JavaRush /مدونة جافا /Random-AR /ما هو JSP؟ دعونا نستكشف الاحتمالات في الممارسة العملية
Анзор Кармов
مستوى
Санкт-Петербург

ما هو JSP؟ دعونا نستكشف الاحتمالات في الممارسة العملية

نشرت في المجموعة
JSP أو Java Server Pages هي تقنية Java تتيح لك إنشاء صفحات ويب ديناميكية لتطبيقات Java. في هذه المقالة، سنتحدث بمزيد من التفصيل حول ماهية JSP، ونناقش بعض إمكانيات هذه التقنية، وننظر إلى بنية صفحات JSP، ونحاول أيضًا إلقاء نظرة عملية على ماهية صفحات خادم Java هذه. ما هو JSP؟  فهم الإمكانيات على أرض الواقع - 1لكن أولاً، دعونا نتحدث عن فوائد وأهمية JSP. يسمح JSP للمطور بما يلي:
  • تلقي البيانات من صفحة ويب إلى كود Java؛
  • إرسال البيانات من كود Java إلى صفحة ويب؛
  • اكتب كود Java مباشرة داخل html (ومع ذلك، لا ينبغي عليك إساءة استخدام هذا).
يمكن تقييم الحاجة إلى معرفة JSP بشكل كبير جدًا لعدة أسباب:
  • JSP هي إحدى تقنيات الويب Java الرئيسية؛
  • يُستخدم JSP على نطاق واسع في معظم الشركات والمشاريع؛
  • يتكامل JSP بسلاسة مع Java servlet داخل حاوية servlet.

تعريف جي إس بي

فيما يلي تعريف من ويكيبيديا: JSP (صفحات JavaServer) هي تقنية تسمح لمطوري الويب بإنشاء محتوى يحتوي على مكونات ثابتة وديناميكية. تحتوي صفحة JSP على نوعين من النص: بيانات المصدر الثابتة، والتي يمكن أن تكون في أحد تنسيقات النص HTML أو SVG أو WML أو XML، وعناصر JSP، التي تقوم بإنشاء محتوى ديناميكي. بالإضافة إلى ذلك، يمكن استخدام مكتبات علامات JSP، بالإضافة إلى لغة التعبير (EL) لتضمين كود Java في المحتوى الثابت لصفحات JSP. تتم ترجمة كود صفحة JSP إلى كود Java servlet باستخدام مترجم صفحة Jasper JSP، ثم يتم تجميعه في كود Java Virtual Machine (JVM). تتم كتابة حاويات Servlet القادرة على تنفيذ صفحات JSP بلغة Java المستقلة عن النظام الأساسي. تقنية JSP هي تقنية مستقلة عن النظام الأساسي ومحمولة وقابلة للتوسيع بسهولة لتطوير تطبيقات الويب.

هيكل صفحة JSP

بشكل عام، يشير JSP إلى صفحات الويب الديناميكية التي يتم فيها إنشاء الجزء الديناميكي باستخدام Java، ويتم إنشاء الجزء الثابت باستخدام لغات الترميز، غالبًا HTML. مثل هذه الصفحة عبارة عن مستند نصي بامتداد .jsp، مكتوبًا بإحدى اللغات الترميزية (مثل HTML وSVG وWML وXML)، تتخلله عناصر JSP (أو علامات JSP). تحتوي هذه العلامات على استدعاءات لرمز الخادم (البيانات) وتقوم أيضًا بإجراء بعض العمليات الحسابية. تتم معالجة هذه الملفات على الخادم، ونتيجة لذلك يتم تحويل جميع علامات JSP إلى علامات html، ويكون الإخراج صفحة html عادية. يوضح الرسم البياني أدناه رسمًا تخطيطيًا لبنية صفحة JSP وتفاعلها مع الخادم. ما هو JSP؟  فهم الإمكانيات على أرض الواقع - 2مثال لصفحة JSP بسيطة:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
في هذا المثال، يتم "دمج" تعبير JSP المكتوب بلغة خاصة، وهي لغة التعبير (EL)، داخل كود html . يوفر آلية مهمة للتفاعل بين طبقة العرض (صفحات الويب) وطبقة منطق أعمال التطبيق (كود Java). كما ترون من المثال، فإن تعبير JSP محاط بأقواس متعرجة، مع علامة الدولار الرائدة - ${...}. يتم تقييم كل ما هو موجود داخل الأقواس المتعرجة على الخادم، ويتم تقديم نتيجة هذا التعبير بتنسيق html، في المكان الذي تم فيه تعريف تعبير JSP في الأصل. بعد معالجة جميع العلامات، ستبدو الصفحة كما يلي:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

تثبيت وتشغيل حاوية servlet

نظرًا لأن كود JSP يُترجم إلى كود Java servlet، فنحن بحاجة إلى الحصول على نوع من حاوية servlet في مكان ما حتى نتمكن من التحدث عن كيفية عمل JSP. خلاف ذلك، بدون حاوية، لن يعمل JSP. لكن أولاً، دعونا نلقي نظرة على تعريف حاوية servlet. حاوية servlet عبارة عن برنامج عبارة عن خادم يوفر دعم النظام للـ servlet ويضمن دورة حياتها وفقًا للقواعد المحددة في المواصفات. يمكن أن يعمل كخادم ويب مستقل وكامل، أو يكون مزود صفحة لخادم ويب آخر، أو يتكامل مع خادم تطبيق Java EE. واحدة من حاويات servlet الأكثر شعبية هي Apache Tomcat. ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 3ومن الجدير بالذكر أن Tomcat ليس خادم تطبيقات Java EE متكامل. ومع ذلك، بالنسبة للاحتياجات الحيوية لصفحات servlets وJSP، فإن خادم Tomcat أكثر من كافٍ. لنبدأ التثبيت. يمكنك تنزيل Tomcat من الصفحة الرسمية . بالنسبة لنظام التشغيل Windows، يمكنك تثبيت Tomcat على النحو التالي:
  1. قم بتنزيل مثبت خدمة Windows 32 بت/64 بت.

  2. لنقم بتشغيل الملف.

  3. بعد ذلك، اتبع إجراء التثبيت المعتاد:

    1. لا تنس تحديد مربع الاختيار "الأمثلة" في نافذة التثبيت المقابلة:

      ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 4
    2. وحدد المسار إلى JRE المثبت مسبقًا:

      ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 5
  4. بعد التثبيت، قم بتشغيل Tomcat وافتح المتصفح. انتقل إلى http://localhost:8080/ .

إذا رأيت صفحة بدء Tomcat، فهذا يعني أن التثبيت كان ناجحًا وأن الخادم قيد التشغيل. لبدء تشغيل Tomcat وإيقافه يدويًا، يمكنك تشغيل أحد الملفين القابلين للتنفيذ في دليل bin. وهو موجود داخل الدليل الذي تم تثبيت Tomcat فيه: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 6

التطبيقات التجريبية. أشياء مخفية

دعونا نلقي نظرة على بعض ميزات JSP أثناء العمل. أحدها هو الوصول إلى ما يسمى بالأشياء المخفية ( الكائنات الضمنية ). هذه هي الكائنات التي يمكن الوصول إليها باستخدام لغة التعبير (EL). ومن أمثلة هذه الكائنات رؤوس HTTP أو معلمات URL. دعونا نكشف (أو نجدد ذاكرتنا) عن معلمات URL. يوضح المثال أدناه عنوان URL مع المعلمات. تظهر المعلمات بالخط العريض: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom تبدأ المعلمات دائمًا بعلامة استفهام (؟). ويتبع ذلك اسم المعلمة، متبوعًا بعلامة المساواة - يتم تحديد قيمة المعلمة. يمكن أن يكون هناك عدة معلمات أو واحدة. إذا كان هناك أكثر من زوج واحد، فسيتم فصل كل زوج من الاسم والقيمة بحرف علامة الضم (&). في المثال أعلاه، تم تحديد عدة معلمات وقيمها:
اسم المعلمة قيمة المعلمة
المعلمة1 القيمة1
المعلمة2 القيمة2
أ 1
اسم توم
دعونا نلقي نظرة على كيفية الوصول إلى الكائنات المخفية في JSP، بما في ذلك معلمات URL. للقيام بذلك، قم بتشغيل Tomcat وافتح المتصفح على الصفحة http://localhost:8080/ ثم انتقل إلى صفحة الأمثلة: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 7ثم اتبع الرابط أمثلة JSP: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 8في صفحة الأمثلة اتبع الرابط الكائنات الضمنية -> التنفيذ: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 9في هذا الصفحة يمكنك رؤية مثال لاستخدام الكائنات المخفية. فيما يلي لقطة شاشة للصفحة مع شرح تفصيلي: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 10حاول تغيير قيمة المعلمة fooباستخدام الحقل المقابل في الصفحة، ثم لاحظ أن قيمة هذه المعلمة قد تغيرت أيضًا في شريط العناوين. لا تحتوي الصفحة المعروضة على الكثير من الوظائف، ولكنها مرجع جيد يمكنك الرجوع إليه في المستقبل عندما تحتاج إلى الوصول إلى كائن مخفي معين. تحتوي هذه الصفحة على قائمة بالأشياء المخفية التي يمكن الوصول إليها. ويوضح الجدول أدناه كيفية الوصول إلى كائن معين.

وظائف جي إس بي

لنعد الآن إلى الصفحة السابقة ونلقي نظرة على الكود المصدري لصفحة "الأشياء المخفية": ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 11وهنا:
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])} </td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])} </td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])} </td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>
إذا كنت معتادًا على لغة HTML، فيجب أن يكون كود المصدر للصفحة واضحًا تمامًا بالنسبة لك. انتبه لهذه السطور:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
هنا نرى علامات html <tr>و <td>. العلامات متبوعة <td>بعلامات JSP، ملفوفة بأقواس متعرجة ${ }. ومع ذلك، لاحظ كيف يتم إخراج قيمة معلمة URL foo:
${fn:escapeXml(param["foo"])}
يتم إخراج القيمة من خلال استخدام دالة JSP fn:escapeXml(). تتضمن وظائف JSP بعض الوظائف التي يمكن إعادة استخدامها. في هذه الحالة، هذا هو الهروب من XML. توفر تقنية JSP نطاقًا واسعًا من الوظائف للاختيار من بينها، بالإضافة إلى القدرة على إنشاء وظائفك الخاصة. لاستخدام وظيفة في JSP، يجب عليك استيراد المكتبة المناسبة التي تم تعريف الوظيفة فيها إلى ملف JSP.

مكتبات العلامات

دعونا نلقي نظرة على سطر آخر من التعليمات البرمجية المصدر (السطر الثاني) أعلاه:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
هذه هي الطريقة التي يتم بها استيراد مكتبات العلامات. بناء الجملة بديهي. نحدد عدة أشياء:
  • taglib(مكتبة العلامات - مكتبة العلامات)؛
  • urlحيث تقع هذه المكتبة؛
  • بادئة (في هذه الحالة fn) يمكن من خلالها استدعاء الوظائف المحددة في هذه المكتبة.
في المثال أعلاه، نظرنا إلى استيراد الوظائف. على وجه التحديد، في مثالنا، قمنا باستيراد مكتبة JSTL (مكتبة العلامات القياسية JSP). JSTL هي مكتبة علامات قياسية تحتوي على مجموعة من المكتبات المختلفة التي تأتي مع كل تطبيق servlet وJSP، بما في ذلك Tomcat. مكتبة العلامات الشائعة الأخرى هي مكتبة أساسية، والتي يمكن استيرادها على النحو التالي:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
كما هو الحال مع fn، فإن التدوين cاختياري ومقبول بشكل عام. يمكن العثور على هذا التصنيف في كل مكان تقريبًا حيث يتم استخدام هذه المكتبات. فيما يلي مثال لوظيفة من المكتبة الأساسية:
<c:out value = "${'<div>'}"/>
ستقوم هذه الوظيفة ببساطة بإخراج العلامة <div>. تقوم هذه الوظيفة بالفعل بإلغاء XML. هذه الوظيفة مهمة من وجهة نظر أمنية، لأنه من خلال إخراج قيمة المتغيرات مباشرة، ${variable}فإننا نفتح الباب أمام إدخال البرنامج النصي.

تحرير جي إس بي

الآن، متسلحين بالمعرفة الجديدة، دعونا نحاول إجراء تغييرات على التطبيق التجريبي داخل Tomcat. للقيام بذلك، سنجد الكود المصدري لهذه الصفحة داخل المجلد الذي تم تثبيت حاوية servlet فيه. يمكن العثور على هذا الملف على العنوان التالي: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el ثم افتح الملف implicit-objects.jsp في أي محرر نصوص وأضف استيراد المكتبة الأساسية ، ثم استخدمه لنخرج بعض النص: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 12الآن لنقم بتحديث صفحة الكائنات المخفية ونلقي نظرة على التغييرات التي تم إجراؤها: ما هو JSP؟  فهم الإمكانيات في الممارسة العملية - 13

نتائج

لذلك، قمنا بفحص هذه التكنولوجيا بشكل سطحي مثل JSP. نحن ناقشنا:
  • ما هو JSP؟
  • بنية صفحة JSP؛
  • إجراء تثبيت وتشغيل حاوية Tomcat servlet؛
  • تطبيق تجريبي للوصول إلى الكائنات المخفية، والذي تم تضمينه في حزمة توزيع خادم Tomcat؛
  • وظائف JSP ومكتبات العلامات.

ماذا بعد؟

لتأمين المواد يمكنك:
  1. كرر كل ما هو موضح في هذه المقالة.
  2. فكر في التطبيقات التجريبية الأخرى المضمنة في خادم Tomcat.
  3. اكتب التطبيق الخاص بك وقم بنشره في حاوية servlet. كدليل، يمكنك استخدام المقالة إنشاء مشروع ويب بسيط في IntelliJ Idea Enterprise. خطوة بخطوة، مع الصور.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION