JavaRush /בלוג Java /Random-HE /מה זה JSP? בואו נבדוק את האפשרויות בפועל
Анзор Кармов
רָמָה
Санкт-Петербург

מה זה JSP? בואו נבדוק את האפשרויות בפועל

פורסם בקבוצה
JSP או Java Server Pages היא טכנולוגיית Java המאפשרת ליצור דפי אינטרנט דינמיים עבור יישומי Java. במאמר זה, נדבר ביתר פירוט על מה זה JSP, נדון בכמה מהיכולות של טכנולוגיה זו, נסתכל על המבנה של דפי JSP, וגם ננסה להסתכל באופן מעשי על מה הם דפי שרת Java אלה. מה זה JSP?  הבנת האפשרויות בפועל - 1אבל קודם כל, בואו נדבר על היתרונות והחשיבות של JSP. JSP מאפשר למפתח:
  • לקבל נתונים מדף אינטרנט לתוך קוד Java;
  • לשלוח נתונים מקוד Java לדף אינטרנט;
  • כתוב קוד Java ישירות בתוך html (עם זאת, אתה לא צריך לעשות זאת לרעה).
ניתן להעריך את הצורך בידע JSP די גבוה מכמה סיבות:
  • JSP היא אחת מטכנולוגיות האינטרנט העיקריות של Java;
  • JSP נמצא בשימוש נרחב ברוב החברות והפרויקטים;
  • JSP משתלב בצורה חלקה עם servlets של Java בתוך מיכל servlet.

הגדרת JSP

הנה הגדרה מויקיפדיה: JSP (JavaServer Pages) היא טכנולוגיה המאפשרת למפתחי אינטרנט ליצור תוכן בעל רכיבים סטטיים ודינאמיים כאחד. דף 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 שנכתב בשפה מיוחדת, Expression Language (EL), "מוטבע" בתוך קוד ה-html . הוא מספק מנגנון חשוב לאינטראקציה בין שכבת המצגת (דפי אינטרנט) לשכבת הלוגיקה העסקית של האפליקציה (קוד Java). כפי שניתן לראות מהדוגמה, הביטוי JSP מוקף בסוגרים מסולסלים, עם סימן דולר מוביל - ${...}. כל מה שנמצא בתוך הפלטה המתולתלת מוערך בשרת, והתוצאה של הביטוי הזה ניתנת ב-html, במקום בו הוגדר במקור ביטוי JSP. לאחר עיבוד כל התגים, העמוד ייראה כך:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

התקנה והרצה של מיכל ה-servlet

מכיוון שקוד ה-JSP מתורגם לקוד servlet Java, אנחנו צריכים להשיג איזשהו מיכל של servlet איפשהו כדי שנוכל לדבר על איך ה-JSP עובד. אחרת, ללא מיכל, JSP לא יעבוד. אבל ראשית, בואו נסתכל על ההגדרה של מיכל servlet. קונטיינר servlet הוא תוכנית שהיא שרת המספקת תמיכת מערכת עבור servlets ומבטיחה את מחזור החיים שלהם בהתאם לכללים המוגדרים במפרטים. זה יכול לעבוד כשרת אינטרנט עצמאי מן המניין, להיות ספק דפים עבור שרת אינטרנט אחר, או להשתלב בשרת יישומי Java EE. אחד ממיכלי הסרבלטים הפופולריים ביותר הוא Apache Tomcat. מה זה JSP?  הבנת האפשרויות בפועל - 3ראוי להזכיר כי Tomcat אינו שרת יישומי Java EE מן המניין. עם זאת, לצרכים החיוניים של servlets ודפי JSP, שרת Tomcat הוא די והותר. בואו נתחיל בהתקנה. אתה יכול להוריד את Tomcat מהעמוד הרשמי . עבור מערכת ההפעלה Windows אתה יכול להתקין את Tomcat באופן הבא:
  1. הורד 32 סיביות/64 סיביות Windows Service Installer.

  2. בוא נריץ את הקובץ.

  3. לאחר מכן, בצע את הליך ההתקנה הרגיל:

    1. אל תשכח לסמן את תיבת הסימון דוגמאות בחלון המתקין המתאים:

      מה זה JSP?  הבנת האפשרויות בפועל - 4
    2. וציין את הנתיב ל-JRE המותקן מראש:

      מה זה JSP?  הבנת האפשרויות בפועל - 5
  4. לאחר ההתקנה, הפעל את Tomcat ופתח את הדפדפן. עבור אל http://localhost:8080/ .

אם אתה רואה את דף הפתיחה של Tomcat, זה אומר שההתקנה הצליחה והשרת פועל. כדי להפעיל ולעצור את Tomcat באופן ידני, אתה יכול להפעיל אחד משני קבצי הפעלה בספריית bin. הוא ממוקם בתוך הספרייה שבה מותקן Tomcat: מה זה JSP?  הבנת האפשרויות בפועל - 6

יישומי הדגמה. חפצים נסתרים

בואו נסתכל על כמה תכונות של JSP בפעולה. אחד מהם הוא גישה למה שנקרא אובייקטים מוסתרים ( Implicit Objects ). אלו אובייקטים שניתן לגשת אליהם באמצעות שפת הביטוי (EL). דוגמאות לאובייקטים כאלה הן כותרות HTTP או פרמטרים של כתובת 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/ ואז עבור לדף דוגמאות: לאחר מה זה JSP?  הבנת האפשרויות בפועל - 7מכן עקוב אחר הקישור JSP דוגמאות: מה זה JSP?  הבנת האפשרויות בפועל - 8בדף הדוגמאות בצע את הקישור Implicit Objects -> Execute: מה זה 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, עטופים בפלטה מתולתלת ${ }. עם זאת, שים לב כיצד הערך של פרמטר כתובת האתר מופק 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. ספריית תגים פופולרית נוספת היא core, אותה ניתן לייבא כך:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
כמו עם fn, הסימון cהוא אופציונלי ומקובל בדרך כלל. ייעוד זה ניתן למצוא כמעט בכל מקום בו נעשה שימוש בספריות אלו. הנה דוגמה לפונקציה מספריית הליבה:
<c:out value = "${'<div>'}"/>
פונקציה זו פשוט תוציא את התג <div>. פונקציה זו כבר מבצעת בריחה של XML. פונקציה זו חשובה מנקודת מבט אבטחה, מכיוון שעל ידי הפלט של ערך המשתנים ישירות, דרך ${variable}, אנו פותחים את הדלת להזרקת סקריפט.

עריכת JSP

כעת, חמושים בידע חדש, בואו ננסה לבצע שינויים באפליקציית ההדגמה בתוך Tomcat. לשם כך, נמצא את קוד המקור של דף זה בתוך התיקיה שבה הותקן מיכל הסרבלט הזה. ניתן למצוא קובץ זה בכתובת הבאה: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el לאחר מכן פתחו את הקובץ implicit-objects.jsp בכל עורך טקסט הוסף את הייבוא ​​של ספריית הליבה , ולאחר מכן השתמש בו בוא נוציא קצת טקסט: מה זה JSP?  הבנת האפשרויות בפועל - 12עכשיו בואו נרענן את דף האובייקטים המוסתרים ונסתכל על השינויים שבוצעו: מה זה JSP?  הבנת האפשרויות בפועל - 13

תוצאות

אז, בדקנו באופן שטחי טכנולוגיה כזו כמו JSP. דנו ב:
  • מה זה JSP;
  • מבנה עמוד JSP;
  • הליך להתקנה והרצה של מיכל הסרבל של Tomcat;
  • אפליקציית הדגמה לגישה לאובייקטים מוסתרים, הכלולה בחבילת ההפצה של שרת Tomcat;
  • פונקציות JSP וספריות תגים.

מה הלאה?

כדי לאבטח את החומר אתה יכול:
  1. חזור על כל המתואר במאמר זה.
  2. שקול יישומי הדגמה אחרים הכלולים בשרת Tomcat.
  3. כתוב יישום משלך ופרוס אותו למיכל servlet. כמדריך, אתה יכול להשתמש במאמר יצירת פרויקט אינטרנט פשוט ב- IntelliJ Idea Enterprise. צעד אחר צעד, עם תמונות.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION