JavaRush /وبلاگ جاوا /Random-FA /JSP چیست؟ بیایید در عمل احتمالات را بررسی کنیم
Анзор Кармов
مرحله
Санкт-Петербург

JSP چیست؟ بیایید در عمل احتمالات را بررسی کنیم

در گروه منتشر شد
JSP یا Java Server Pages یک فناوری جاوا است که به شما امکان می دهد صفحات وب پویا برای برنامه های جاوا ایجاد کنید. در این مقاله با جزئیات بیشتری در مورد چیستی JSP صحبت خواهیم کرد، برخی از قابلیت های این فناوری را مورد بررسی قرار می دهیم، ساختار صفحات JSP را بررسی می کنیم و همچنین سعی می کنیم نگاهی کاربردی به این صفحات سرور Java داشته باشیم. JSP چیست؟  درک امکانات در عمل - 1اما ابتدا اجازه دهید در مورد مزایا و اهمیت JSP صحبت کنیم. JSP به توسعه دهنده اجازه می دهد:
  • دریافت داده ها از یک صفحه وب به کد جاوا؛
  • ارسال داده ها از کد جاوا به یک صفحه وب؛
  • کد جاوا را مستقیماً در html بنویسید (با این حال، نباید از آن سوء استفاده کنید).
نیاز به دانش JSP را می توان به دلایل مختلف بسیار ارزیابی کرد:
  • JSP یکی از اصلی ترین فناوری های وب جاوا است.
  • JSP به طور گسترده در اکثر شرکت ها و پروژه ها استفاده می شود.
  • JSP به طور یکپارچه با سرورهای جاوا در داخل یک ظرف سرولت ادغام می شود.

تعریف JSP

در اینجا تعریفی از ویکی پدیا آورده شده است: JSP (صفحات جاوا سرور) فناوری است که به توسعه دهندگان وب اجازه می دهد محتوایی ایجاد کنند که دارای اجزای ثابت و پویا باشد. یک صفحه JSP شامل دو نوع متن است: داده های منبع ثابت، که می تواند در یکی از قالب های متنی HTML، SVG، WML یا XML باشد، و عناصر JSP که محتوای پویا را می سازند. علاوه بر این، می توان از کتابخانه های تگ JSP و همچنین زبان بیان (EL) برای جاسازی کد جاوا در محتوای ثابت صفحات JSP استفاده کرد. کد صفحه JSP با استفاده از کامپایلر صفحه Jasper JSP به کد جاوا سرولت ترجمه می شود و سپس در بایت کد ماشین مجازی جاوا (JVM) کامپایل می شود. ظروف Servlet که قادر به اجرای صفحات JSP هستند به زبان جاوا مستقل از پلتفرم نوشته شده اند. فناوری JSP یک فناوری مستقل از پلتفرم، قابل حمل و به راحتی قابل توسعه برای توسعه برنامه های کاربردی وب است.

ساختار صفحه JSP

به طور کلی، JSP به صفحات وب پویا اطلاق می شود که در آن بخش پویا با استفاده از جاوا تولید می شود و بخش استاتیک با استفاده از زبان های نشانه گذاری، اغلب 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 نوشته شده در یک زبان خاص، Expression Language (EL)، در داخل کد html "جاسازی شده است" . این یک مکانیسم مهم برای تعامل بین لایه ارائه (صفحات وب) و لایه منطق تجاری برنامه (کد جاوا) فراهم می کند. همانطور که از مثال می بینید، عبارت JSP در پرانتزهای فرفری با علامت دلار پیشرو محصور شده است - ${...}. هر چیزی که در داخل بریس های فرفری قرار دارد در سرور ارزیابی می شود و نتیجه این عبارت در محلی که عبارت JSP در ابتدا تعریف شده است در html آورده شده است. پس از پردازش تمام تگ ها، صفحه به شکل زیر در می آید:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

نصب و اجرای کانتینر servlet

از آنجایی که کد JSP به کد سرولت جاوا ترجمه می شود، باید نوعی کانتینر سرولت در جایی تهیه کنیم تا بتوانیم در مورد نحوه عملکرد JSP صحبت کنیم. در غیر این صورت، بدون کانتینر، JSP کار نخواهد کرد. اما ابتدا اجازه دهید به تعریف ظرف سرولت نگاه کنیم. کانتینر servlet برنامه ای است که سروری است که پشتیبانی سیستم را برای سرولت ها فراهم می کند و چرخه زندگی آنها را مطابق با قوانین تعریف شده در مشخصات تضمین می کند. این می تواند به عنوان یک وب سرور مستقل کامل کار کند، ارائه دهنده صفحه برای وب سرور دیگری باشد یا در یک سرور برنامه Java EE ادغام شود. یکی از محبوب ترین کانتینرهای سرولت آپاچی تامکت است. JSP چیست؟  درک امکانات در عمل - 3شایان ذکر است که Tomcat یک سرور برنامه کاربردی Java EE کامل نیست. با این حال، برای نیازهای حیاتی servlets و صفحات JSP، سرور Tomcat بیش از حد کافی است. بیایید نصب را شروع کنیم. می توانید Tomcat را از صفحه رسمی دانلود کنید . برای سیستم عامل ویندوز می توانید Tomcat را به صورت زیر نصب کنید:
  1. دانلود Windows Service Installer 32 بیتی/64 بیتی.

  2. بیایید فایل را اجرا کنیم.

  3. در مرحله بعد، مراحل نصب معمول را دنبال کنید:

    1. فراموش نکنید که چک باکس Examples را در پنجره نصب کننده مربوطه علامت بزنید:

      JSP چیست؟  درک امکانات در عمل - 4
    2. و مسیر JRE از پیش نصب شده را مشخص کنید:

      JSP چیست؟  درک امکانات در عمل - 5
  4. پس از نصب، Tomcat را راه اندازی کنید و مرورگر را باز کنید. به http://localhost:8080/ بروید .

اگر صفحه شروع Tomcat را مشاهده کردید، به این معنی است که نصب با موفقیت انجام شد و سرور در حال اجرا است. برای شروع و توقف دستی Tomcat، می توانید یکی از دو فایل اجرایی را در فهرست bin اجرا کنید. داخل فهرستی که Tomcat در آن نصب شده است قرار دارد: JSP چیست؟  درک امکانات در عمل - 6

برنامه های دمو اشیاء پنهان

بیایید به برخی از ویژگی های JSP در عمل نگاه کنیم. یکی از آنها دسترسی به اشیاء به اصطلاح پنهان ( Implicit Objects ) است. اینها اشیایی هستند که با استفاده از زبان بیان (EL) قابل دسترسی هستند. نمونه هایی از این اشیا عبارتند از هدرهای HTTP یا پارامترهای URL. بیایید فاش کنیم (یا حافظه خود را تازه کنیم) پارامترهای URL چیست. مثال زیر یک URL با پارامترها را نشان می دهد. پارامترها به صورت پررنگ هستند: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom پارامترها همیشه با علامت سوال (؟) شروع می شوند. پس از آن نام پارامتر و به دنبال آن علامت مساوی آمده است - مقدار پارامتر تعیین می شود. ممکن است چندین یا یک پارامتر وجود داشته باشد. اگر بیش از یک وجود داشته باشد، هر جفت نام-مقدار با یک کاراکتر آمپر (&) از هم جدا می شود. در مثال بالا چندین پارامتر و مقادیر آنها تعریف شد:
نام پارامتر مقدار پارامتر
param1 ارزش 1
param2 ارزش 2
آ 1
نام تام
بیایید نگاهی به نحوه دسترسی به اشیاء پنهان در JSP، از جمله پارامترهای URL بیاندازیم. برای انجام این کار Tomcat را راه اندازی کنید و مرورگر را در صفحه http://localhost:8080/ باز کنید سپس به صفحه Examples بروید: سپس JSP چیست؟  درک امکانات در عمل - 7پیوند JSP Examples را دنبال کنید: در صفحه نمونه ها پیوند Implicit Objects -> Execute: در این را JSP چیست؟  درک امکانات در عمل - 8دنبال کنید. JSP چیست؟  درک امکانات در عمل - 9در صفحه می توانید نمونه ای از استفاده از اشیاء پنهان را مشاهده کنید. در زیر یک اسکرین شات از صفحه با توضیحات دقیق آمده است: JSP چیست؟  درک امکانات در عمل - 10سعی کنید مقدار پارامتر را fooبا استفاده از فیلد مربوطه در صفحه تغییر دهید، سپس توجه کنید که مقدار این پارامتر نیز در نوار آدرس تغییر کرده است. صفحه ارائه شده کارایی چندانی ندارد، اما مرجع خوبی است که در آینده در مواقعی که نیاز به دسترسی به یک شی مخفی خاص دارید، می توانید به آن مراجعه کنید. این صفحه حاوی لیستی از اشیاء پنهان است که می توان به آنها دسترسی داشت. و در زیر، در جدول، نحوه دسترسی به یک شی خاص نشان داده شده است.

توابع JSP

حالا بیایید به صفحه قبل برگردیم و نگاهی به کد منبع صفحه "اشیاء پنهان" بیندازیم: 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 Standard Tag Library) را وارد کردیم. JSTL یک کتابخانه برچسب استاندارد است که شامل مجموعه ای از کتابخانه های مختلف است که با هر سرولت و اجرای JSP، از جمله Tomcat ارائه می شود. یکی دیگر از کتابخانه های تگ محبوب هسته است که می تواند به این صورت وارد شود:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
مانند fn, نماد cاختیاری است و به طور کلی پذیرفته شده است. تقریباً در هر جایی که از این کتابخانه‌ها استفاده می‌شود، این نام را می‌توان یافت. در اینجا یک مثال از یک تابع از کتابخانه هسته آورده شده است:
<c:out value = "${'<div>'}"/>
این تابع به سادگی تگ را خروجی می دهد <div>. این تابع قبلاً XML Escape را انجام می دهد. این تابع از نظر امنیتی مهم است، زیرا با خروجی مستقیم مقدار متغیرها، از طریق ${variable}، در را برای تزریق اسکریپت باز می کنیم.

ویرایش JSP

اکنون، مسلح به دانش جدید، بیایید سعی کنیم تغییراتی در برنامه آزمایشی داخل تامکت ایجاد کنیم. برای انجام این کار، کد منبع این صفحه را در پوشه ای که این کانتینر servlet در آن نصب شده است، پیدا می کنیم. این فایل را می‌توانید در آدرس زیر پیدا کنید: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el سپس فایل implicit-objects.jsp را در هر ویرایشگر متنی باز کنید، وارد کردن کتابخانه هسته را اضافه کنید. و سپس از آن استفاده کنید بیایید مقداری متن خروجی بگیریم: JSP چیست؟  درک امکانات در عمل - 12حالا بیایید صفحه اشیاء پنهان را بازخوانی کنیم و به تغییرات ایجاد شده نگاهی بیندازیم: JSP چیست؟  درک امکانات در عمل - 13

نتایج

بنابراین، ما به طور سطحی فناوری هایی مانند JSP را بررسی کرده ایم. بحث کردیم:
  • JSP چیست
  • ساختار صفحه JSP.
  • روش نصب و اجرای کانتینر سرولت تامکت؛
  • برنامه آزمایشی برای دسترسی به اشیاء پنهان که در بسته توزیع سرور Tomcat موجود است.
  • توابع JSP و کتابخانه های برچسب.

بعدش چی؟

برای ایمن سازی مواد می توانید:
  1. همه آنچه در این مقاله توضیح داده شده است را تکرار کنید.
  2. سایر برنامه های آزمایشی ارائه شده با سرور Tomcat را در نظر بگیرید.
  3. برنامه خود را بنویسید و آن را در یک کانتینر servlet مستقر کنید. به عنوان راهنما می توانید از مقاله ایجاد یک پروژه وب ساده در IntelliJ Idea Enterprise استفاده کنید. گام به گام با عکس.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION