JSP və ya Java Server Pages Java proqramları üçün dinamik veb səhifələr yaratmağa imkan verən Java texnologiyasıdır. Bu yazıda biz JSP-nin nə olduğu haqqında daha ətraflı danışacağıq, bu texnologiyanın bəzi imkanlarını müzakirə edəcəyik, JSP səhifələrinin strukturuna baxacağıq, həmçinin bu Java Server Səhifələrinin nə olduğuna praktiki nəzər salmağa çalışacağıq. JSP nədir?  Təcrübədə imkanların dərk edilməsi - 1Ancaq əvvəlcə JSP-nin üstünlükləri və əhəmiyyətindən danışaq. JSP tərtibatçıya imkan verir:
  • veb-səhifədən Java koduna məlumat almaq;
  • Java kodundan veb səhifəyə məlumat göndərmək;
  • Java kodunu birbaşa html daxilində yazın (lakin bundan sui-istifadə etməməlisiniz).
JSP biliyinə ehtiyac bir neçə səbəbə görə olduqca yüksək qiymətləndirilə bilər:
  • JSP əsas Java veb texnologiyalarından biridir;
  • JSP əksər şirkətlərdə və layihələrdə geniş istifadə olunur;
  • JSP servlet konteynerində Java servletləri ilə problemsiz şəkildə inteqrasiya edir.

JSP tərifi

Vikipediyadan verilən tərif budur: JSP (JavaServer Səhifələri) veb tərtibatçılarına həm statik, həm də dinamik komponentləri olan məzmun yaratmağa imkan verən texnologiyadır. JSP səhifəsi iki növ mətndən ibarətdir: HTML, SVG, WML və ya XML mətn formatlarından birində ola bilən statik mənbə məlumatları və dinamik məzmunu yaradan JSP elementləri. Bundan əlavə, JSP teq kitabxanalarından, həmçinin Java kodunu JSP səhifələrinin statik məzmununa yerləşdirmək üçün İfadə Dilindən (EL) istifadə edilə bilər. JSP səhifə kodu Jasper JSP səhifə kompilyatorundan istifadə edərək servlet Java koduna tərcümə edilir və sonra Java Virtual Machine (JVM) bayt koduna tərtib edilir. JSP səhifələrini icra etməyə qadir olan servlet konteynerləri platformadan müstəqil Java dilində yazılmışdır. JSP texnologiyası veb proqramların hazırlanması üçün platformadan müstəqil, portativ və asanlıqla genişləndirilə bilən texnologiyadır.

JSP səhifə quruluşu

Ümumiyyətlə, JSP dinamik hissənin Java-dan, statik hissənin isə işarələmə dillərindən, əksər hallarda HTML-dən istifadə etməklə yaradıldığı dinamik veb səhifələrə aiddir. Belə bir səhifə JSP elementləri (və ya JSP teqləri) ilə kəsişmiş işarələmə dillərindən birində (HTML, SVG, WML və XML kimi) yazılmış .jsp uzantılı mətn sənədidir. Bu teqlər server koduna (məlumatlara) zəngləri ehtiva edir və həmçinin bəzi hesablamalar aparır. Bu fayllar serverdə işlənir, nəticədə bütün JSP teqləri html teqlərinə çevrilir və çıxış adi html səhifəsidir. Aşağıdakı diaqram JSP səhifəsinin strukturunun və onun serverlə qarşılıqlı əlaqəsinin diaqramını göstərir. JSP nədir?  Təcrübədə imkanların dərk edilməsi - 2Sadə bir JSP səhifəsinin nümunəsi:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
Bu misalda xüsusi dildə, İfadə Dilində (EL) yazılmış JSP ifadəsi html kodunun içərisinə “yerləşdirilmişdir” . O, təqdimat təbəqəsi (veb-səhifələr) və tətbiqin biznes məntiqi təbəqəsi (Java kodu) arasında qarşılıqlı əlaqə üçün mühüm mexanizm təmin edir. Nümunədən göründüyü kimi, JSP ifadəsi əyri mötərizələr içərisində, aparıcı dollar işarəsi ilə - ${...}. Buruq mötərizələrin içərisində olan hər şey serverdə qiymətləndirilir və bu ifadənin nəticəsi html-də, JSP ifadəsinin ilkin olaraq təyin olunduğu yerdə verilir. Bütün etiketləri emal etdikdən sonra səhifə belə görünəcək:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

Servlet konteynerinin quraşdırılması və işə salınması

JSP kodu Java servlet koduna tərcümə edildiyi üçün JSP-nin necə işlədiyi barədə danışa bilmək üçün biz haradasa bir növ servlet konteyneri əldə etməliyik. Əks halda, konteyner olmadan JSP işləməyəcək. Ancaq əvvəlcə servlet konteynerinin tərifinə baxaq. Servlet konteyneri spesifikasiyalarda müəyyən edilmiş qaydalara uyğun olaraq servletlərə sistem dəstəyini təmin edən və onların həyat dövrünü təmin edən server olan proqramdır. O, tam hüquqlu müstəqil veb server kimi işləyə, başqa veb server üçün səhifə təminatçısı ola və ya Java EE proqram serverinə inteqrasiya edə bilər. Ən məşhur servlet konteynerlərindən biri Apache Tomcat-dır. JSP nədir?  Təcrübədə imkanların dərk edilməsi - 3Qeyd etmək lazımdır ki, Tomcat tam hüquqlu Java EE proqram serveri deyil. Bununla birlikdə, servletlərin və JSP səhifələrinin həyati ehtiyacları üçün Tomcat serveri kifayət qədərdir. Quraşdırmaya başlayaq. Siz Tomcat-ı rəsmi səhifədən yükləyə bilərsiniz . Windows OS üçün Tomcat-ı aşağıdakı kimi quraşdıra bilərsiniz:
  1. 32-bit/64-bit Windows Xidmət Quraşdırıcısını endirin.

  2. Gəlin faylı işə salaq.

  3. Sonra, adi quraşdırma prosedurunu yerinə yetirin:

    1. Müvafiq quraşdırıcı pəncərəsində Nümunələr qeyd qutusunu qeyd etməyi unutmayın:

      JSP nədir?  Təcrübədə imkanların dərk edilməsi - 4
    2. və əvvəlcədən quraşdırılmış JRE-yə gedən yolu göstərin:

      JSP nədir?  Təcrübədə imkanların dərk edilməsi - 5
  4. Quraşdırıldıqdan sonra Tomcat-ı işə salın və brauzeri açın. Http://localhost:8080/ ünvanına keçin .

Tomcat başlanğıc səhifəsini görürsünüzsə, bu, quraşdırmanın uğurlu olduğunu və serverin işlədiyini bildirir. Tomcat-ı əl ilə işə salmaq və dayandırmaq üçün bin qovluğunda iki icra edilə bilən fayldan birini işə sala bilərsiniz. O, Tomcat-ın quraşdırıldığı qovluğun içərisində yerləşir: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 6

Demo proqramlar. Gizli obyektlər

Fəaliyyətdə olan bəzi JSP xüsusiyyətlərinə baxaq. Onlardan biri sözdə gizli obyektlərə girişdir ( İmplicit Objects ). Bunlar İfadə Dilindən (EL) istifadə etməklə əldə edilə bilən obyektlərdir. Belə obyektlərin nümunələri HTTP başlıqları və ya URL parametrləridir. Gəlin URL parametrlərinin nə olduğunu açıqlayaq (ya da yaddaşımızı təzələyək). Aşağıdakı nümunə parametrləri olan URL-i göstərir. Parametrlər qalın şriftlə yazılmışdır: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Parametrlər həmişə sual işarəsi (?) ilə başlayır. Bunun ardınca parametrin adı, ardınca bərabərlik işarəsi gəlir - parametrin dəyəri müəyyən edilir. Bir neçə və ya bir parametr ola bilər. Əgər birdən çox olarsa, hər bir ad-dəyər cütü və işarəsi (&) ilə ayrılır. Yuxarıdakı nümunədə bir neçə parametr və onların dəyərləri müəyyən edilmişdir:
Parametr adı Parametr dəyəri
param1 dəyər 1
param2 dəyər 2
a 1
ad Tom
Gəlin JSP-də gizli obyektlərə, o cümlədən URL parametrlərinə necə daxil ola biləcəyinizi nəzərdən keçirək. Bunun üçün Tomcat-ı işə salın və http://localhost:8080/ səhifəsində brauzeri açın. Sonra Nümunələr səhifəsinə keçin: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 7Sonra JSP Nümunələri linkini izləyin: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 8Nümunələr səhifəsində Gizli Obyektlər -> İcra: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 9Bu linki izləyin. səhifədə gizli obyektlərdən istifadə nümunəsini görə bilərsiniz. Aşağıda ətraflı izahatları olan səhifənin ekran görüntüsü verilmişdir: Səhifədəki müvafiq sahədən istifadə edərək JSP nədir?  Təcrübədə imkanların dərk edilməsi - 10parametrin dəyərini dəyişməyə cəhd edin , sonra ünvan çubuğunda bu parametrin dəyərinin də dəyişdiyinə diqqət yetirin. fooTəqdim olunan səhifənin çox funksionallığı yoxdur, lakin bu, gələcəkdə müəyyən bir gizli obyektə daxil olmaq lazım olduqda müraciət edə biləcəyiniz yaxşı istinaddır. Bu səhifəyə daxil olmaq mümkün olan gizli obyektlərin siyahısı var. Və aşağıda, cədvəldə müəyyən bir obyektə necə daxil ola biləcəyiniz nümayiş etdirilir.

JSP funksiyaları

İndi əvvəlki səhifəyə qayıdaq və “gizli obyektlər” səhifəsinin mənbə koduna nəzər salaq: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 11Budur:
<%@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>
Əgər HTML ilə tanışsınızsa, səhifənin mənbə kodu sizin üçün kifayət qədər aydın olmalıdır. Bu sətirlərə diqqət yetirin:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
Burada html teqlərini <tr><td>. Teqlərdən sonra <td>əyri mötərizələrə bükülmüş JSP teqləri gəlir ${ }. Bununla belə, URL parametrinin dəyərinin necə çıxdığına diqqət yetirin foo:
${fn:escapeXml(param["foo"])}
Dəyər JSP funksiyasından istifadə etməklə çıxarılır fn:escapeXml(). JSP funksiyaları təkrar istifadə oluna bilən bəzi funksiyaları əhatə edir. Bu halda, o, XML-dən qaçır. JSP texnologiyası seçmək üçün çoxlu funksiyalar, həmçinin öz funksiyalarınızı yaratmaq imkanı təqdim edir. JSP-də funksiyadan istifadə etmək üçün funksiyanın müəyyən edildiyi müvafiq kitabxananı JSP faylına idxal etməlisiniz.

Kitabxanaları etiketləyin

Yuxarıdakı başqa mənbə kodu sətirinə (ikinci sətir) nəzər salaq:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Teq kitabxanalarının idxalı belədir. Sintaksis intuitivdir. Biz bir neçə şeyi müəyyənləşdiririk:
  • taglib(teq kitabxanası - etiket kitabxanası);
  • url, bu kitabxananın yerləşdiyi yer;
  • prefiks (bu halda fn) onun vasitəsilə bu kitabxanada müəyyən edilmiş funksiyaları çağırmaq mümkün olacaq.
Yuxarıdakı nümunədə biz funksiyaların idxalına baxdıq. Konkret olaraq, nümunəmizdə JSTL (JSP Standard Tag Library) kitabxanasını idxal etdik. JSTL, Tomcat daxil olmaqla, hər bir servlet və JSP tətbiqi ilə gələn müxtəlif kitabxanalar toplusunu ehtiva edən standart etiket kitabxanasıdır. Başqa bir məşhur etiket kitabxanası belə idxal edilə bilən əsasdır:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
ilə olduğu kimi fn, qeyd cisteğe bağlıdır və ümumiyyətlə qəbul edilir. Bu təyinat, demək olar ki, bu kitabxanaların istifadə edildiyi hər yerdə tapıla bilər. Əsas kitabxanadan bir funksiya nümunəsidir:
<c:out value = "${'<div>'}"/>
Bu funksiya sadəcə etiketi çıxaracaq <div>. Bu funksiya artıq XML-dən qaçır. Bu funksiya təhlükəsizlik nöqteyi-nəzərindən vacibdir, çünki dəyişənlərin dəyərini birbaşa vasitəsilə çıxarmaqla ${variable}biz skript inyeksiyasının qapısını açırıq.

JSP Redaktəsi

İndi yeni biliklərlə silahlanaraq Tomcat daxilində demo tətbiqetmədə dəyişikliklər etməyə çalışaq. Bunun üçün biz bu səhifənin mənbə kodunu bu servlet konteynerinin quraşdırıldığı qovluqda tapacağıq. Bu faylı aşağıdakı ünvanda tapmaq olar: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Sonra istənilən mətn redaktorunda implicit-objects.jsp faylını açın Əsas kitabxananın idxalını əlavə edin , və sonra istifadə edin Bir neçə mətni çıxaraq: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 12İndi gizli obyektlər səhifəsini yeniləyək və edilən dəyişikliklərə nəzər salaq: JSP nədir?  Təcrübədə imkanların dərk edilməsi - 13

Nəticələr

Beləliklə, biz JSP kimi texnologiyanı səthi şəkildə araşdırdıq. Biz müzakirə etdik:
  • JSP nədir;
  • JSP səhifə quruluşu;
  • Tomcat servlet konteynerinin quraşdırılması və işə salınması proseduru;
  • Tomcat server paylama paketinə daxil olan gizli obyektlərə daxil olmaq üçün demo proqram;
  • JSP funksiyaları və etiket kitabxanaları.

Sonra nə var?

Materialı qorumaq üçün aşağıdakıları edə bilərsiniz:
  1. Bu məqalədə təsvir olunan hər şeyi təkrarlayın.
  2. Tomcat serverinə daxil olan digər demo proqramları nəzərdən keçirin.
  3. Öz proqramınızı yazın və onu servlet konteynerinə yerləşdirin. Bələdçi olaraq, IntelliJ Idea Enterprise-də sadə veb layihəsinin yaradılması məqaləsindən istifadə edə bilərsiniz. Şəkillərlə addım-addım.