JavaRush /Блоги Java /Random-TG /JSP чист? Имкониятхоро дар амал санчем
Анзор Кармов
Сатҳи
Санкт-Петербург

JSP чист? Имкониятхоро дар амал санчем

Дар гурӯҳ нашр шудааст
JSP ё Java Server Pages як технологияи Java мебошад, ки ба шумо имкон медиҳад саҳифаҳои динамикӣ барои барномаҳои Java эҷод кунед. Дар ин мақола мо дар бораи чӣ будани JSP муфассалтар сӯҳбат хоҳем кард, баъзе аз имкониятҳои ин технологияро муҳокима мекунем, сохтори саҳифаҳои JSP-ро дида мебароем ва инчунин кӯшиш мекунем, ки дар бораи чӣ будани ин Java Server Саҳифаҳо назар андозем. JSP чист?  Фахмидани имкониятхо дар амал — 1Аммо аввал биёед дар бораи манфиатҳо ва аҳамияти JSP сӯҳбат кунем. JSP ба таҳиякунанда имкон медиҳад, ки:
  • гирифтани маълумот аз саҳифаи веб ба рамзи Java;
  • ирсол маълумот аз codeи Java ба саҳифаи веб;
  • Рамзи Java-ро бевосита дар дохor html нависед (аммо, шумо набояд аз ин суиистифода кунед).
Талабот ба дониши JSP-ро метавон бо чанд сабаб хеле баланд арзёбӣ кард:
  • JSP яке аз технологияҳои асосии веби Java мебошад;
  • JSP дар аксари ширкатҳо ва лоиҳаҳо васеъ истифода мешавад;
  • JSP бефосила бо сервлетҳои Java дар дохor контейнери сервлет ҳамгиро мешавад.

Таърифи JSP

Ин аст таъриф аз Википедиа: JSP (JavaServer Pages) технологияест, ки ба таҳиягарони веб имкон медиҳад мундариҷаи дорои ҷузъҳои статикӣ ва динамикӣ эҷод кунад. Саҳифаи JSP дорои ду намуди матн аст: маълумоти сарчашмаи статикӣ, ки метавонад дар яке аз форматҳои матнии HTML, SVG, WML ё XML бошад ва унсурҳои JSP, ки мундариҷаи динамикӣ бунёд мекунанд. Илова бар ин, китобхонаҳои барчаспҳои JSP ва инчунин забони ифода (EL) барои ворид кардани рамзи Java ба мундариҷаи статикии саҳифаҳои JSP истифода мешаванд. Рамзи саҳифаи JSP бо истифода аз компилятори саҳифаи Jasper JSP ба codeи Java сервлет тарҷума карда мешавад ва сипас ба bytecodeи Java Virtual Machine (JVM) тартиб дода мешавад. Контейнерҳои сервлет, ки қодиранд саҳифаҳои JSP-ро иҷро кунанд, бо забони мустақor Java Java навишта шудаанд. Технологияи JSP як технологияи аз платформа мустақил, сайёр ва ба осонӣ васеъшаванда барои таҳияи барномаҳои веб мебошад.

Сохтори саҳифаи JSP

Умуман, JSP ба веб-саҳифаҳои динамикӣ дахл дорад, ки дар онҳо қисми динамикӣ бо истифода аз Java тавлид мешавад ва қисми статикӣ бо истифода аз забонҳои аломатгузорӣ, аксар вақт HTML тавлид мешавад. Чунин саҳифа ҳуҷҷати матнии дорои тамдиди .jsp мебошад, ки бо яке аз забонҳои аломатгузорӣ (ба монанди HTML, SVG, WML ва XML) навишта шудааст, ки бо унсурҳои JSP (ё барчаспҳои JSP) печонида шудааст. Ин барчаспҳо зангҳоро ба codeи server (маълумот) дар бар мегиранд ва инчунин баъзе ҳисобҳоро иҷро мекунанд. Ин файлҳо дар server коркард карда мешаванд, ки дар натиҷа ҳамаи тегҳои JSP ба тегҳои html табдил меёбанд ва натиҷааш саҳифаи муқаррарии html мебошад. Дар диаграммаи зер диаграммаи сохтори саҳифаи JSP ва ҳамкории он бо server нишон дода шудааст. JSP чист?  Фаҳмидани имкониятҳо дар амал - 2Намунаи саҳифаи оддии JSP:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
Дар ин мисол, ифодаи JSP, ки бо забони махсус навишта шудааст, забони ифода (EL) дар дохor codeи html "дарунсохт" аст . Он як механизми муҳими ҳамкорӣ байни қабати муаррифӣ (саҳифаҳои веб) ва қабати мантиқии тиҷории барномаро (codeи Java) таъмин мекунад. Тавре ки шумо аз мисол мебинед, ифодаи JSP дар қавсҳои ҷингила бо аломати пешбари доллар - ${...}. Ҳама он чизе, ки дар дохor қавсҳои ҷингила мавҷуд аст, дар server арзёбӣ мешавад ва натиҷаи ин ифода дар html дар ҷое, ки ифодаи JSP ибтидо муайян карда шуда буд, дода мешавад. Пас аз коркарди ҳамаи тегҳо, саҳифа чунин хоҳад буд:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

Насб ва ба кор андохтани контейнери сервлет

Азбаски рамзи JSP ба codeи сервлети Java тарҷума шудааст, ба мо лозим аст, ки дар ҷое як навъ контейнери сервлет гирем, то дар бораи чӣ гуна кор кардани JSP сӯҳбат кунем. Дар акси ҳол, бе контейнер, JSP кор намекунад. Аммо аввал, биёед ба таърифи контейнери сервлет назар андозем. Контейнери сервлет ин барномаест, ки serverест, ки дастгирии системаро барои сервлетҳо таъмин мекунад ва давраи зиндагии онҳоро мувофиқи қоидаҳои дар мушаххасот муайяншуда таъмин мекунад. Он метавонад ҳамчун веб-serverи мустақor мукаммал кор кунад, провайдери саҳифа барои веб-serverи дигар бошад ё ба serverи барномаҳои Java EE ҳамгиро шавад. Яке аз маъмултарин контейнерҳои сервлет Apache Tomcat мебошад. JSP чист?  Фахмидани имкониятхо дар амал — 3Бояд қайд кард, ки Tomcat serverи пурраи барномаҳои Java EE нест. Аммо, барои эҳтиёҷоти муҳими сервлетҳо ва саҳифаҳои JSP, serverи Tomcat беш аз кофист. Биёед насбро оғоз кунем. Шумо метавонед Tomcat-ро аз саҳифаи расмӣ зеркашӣ кунед . Барои Windows OS шумо метавонед Tomcat-ро ба таври зерин насб кунед:
  1. Насбкунандаи хидмати 32-бит/64-бита Windows-ро зеркашӣ кунед.

  2. Биёед файлро иҷро кунем.

  3. Баъдан, тартиби муқаррарии насбкуниро иҷро кунед:

    1. Фаромӯш накунед, ки қуттии санҷишро дар равзанаи насбкунандаи мувофиқ санҷед:

      JSP чист?  Фахмидани имкониятхо дар амал — 4
    2. ва роҳро ба JRE-и пешакӣ насбшударо муайян кунед:

      JSP чист?  Фаҳмидани имкониятҳо дар амал - 5
  4. Пас аз насб, Tomcat-ро оғоз кунед ва браузерро кушоед. Ба http://localhost:8080/ равед .

Агар шумо саҳифаи ибтидоии Tomcat-ро бинед, ин маънои онро дорад, ки насбкунӣ бомуваффақият буд ва server кор мекунад. Барои ба таври дастӣ оғоз ва қатъ кардани Tomcat, шумо метавонед яке аз ду файли иҷрошавандаро дар феҳристи бин иҷро кунед. Он дар дохor директорияе ҷойгир аст, ки дар он Tomcat насб шудааст: JSP чист?  Фахмидани имкониятхо дар амал — 6

Барномаҳои намоишӣ. Объектҳои пинҳоншуда

Биёед баъзе хусусиятҳои JSP-ро дар амал бубинем. Яке аз онҳо дастрасӣ ба an objectҳои ба ном пинҳоншуда мебошад ( Объектҳои номуайян ). Инҳо an objectҳое мебошанд, ки бо истифода аз забони ифода (EL) дастрас кардан мумкин аст. Намунаҳои чунин an objectҳо сарлавҳаҳои HTTP ё параметрҳои URL мебошанд. Биёед ошкор кунем (ё хотираи худро тароват диҳем) кадом параметрҳои URL мебошанд. Мисоли зер URL-ро бо параметрҳо нишон медиҳад. Параметрҳо бо ғафс навишта шудаанд: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Параметрҳо ҳамеша бо аломати савол (?) оғоз мешаванд. Пас аз он номи параметр меояд, аломати баробар - арзиши параметр муайян карда мешавад. Якчанд ё як параметр буда метавонад. Агар зиёда аз як ҷуфт мавҷуд бошад, ҳар як ҷуфти ном-арзиш бо аломати амперсанд (&) ҷудо карда мешавад. Дар мисоли боло, якчанд параметрҳо ва арзишҳои онҳо муайян карда шуданд:
Номи параметр Арзиши параметр
парам1 арзиш 1
парам 2 арзиш 2
а 1
ном Том
Биёед бубинем, ки чӣ тавр шумо метавонед ба an objectҳои пинҳонӣ дар JSP дастрасӣ пайдо кунед, аз ҷумла параметрҳои URL. Барои ин, Tomcat -ро оғоз кунед ва браузерро дар саҳифаи http://localhost:8080/ кушоед. Сипас ба саҳифаи Мисолҳо гузаред: JSP чист?  Фаҳмидани имкониятҳо дар амал - 7Пас истиноди JSP-ро пайравӣ кунед Мисолҳо: JSP чист?  Фаҳмидани имкониятҳо дар амал - 8Дар саҳифаи мисолҳо истиноди Объектҳои номуайян -> Иҷро кунед: JSP чист?  Фахмидани имкониятхо дар амал — 9Дар ин ҷо саҳифа шумо метавонед мисоли истифодаи an objectҳои пинҳоншударо бинед. Дар зер скриншоти саҳифа бо тавзеҳоти муфассал оварда шудааст: JSP чист?  Фахмидани имкониятхо дар амал — 10Кӯшиш кунед, ки арзиши параметрро fooбо истифода аз майдони мувофиқи саҳифа тағир диҳед, пас аҳамият диҳед, ки арзиши ин параметр дар сатри суроғаҳо низ тағир ёфтааст. Саҳифаи пешниҳодшуда дорои функсияҳои зиёд нест, аммо он як истинодест, ки шумо метавонед дар оянда ҳангоми дастрасӣ ба an objectи махфии мушаххас муроҷиат кунед. Ин саҳифа рӯйхати an objectҳои пинҳониро дар бар мегирад, ки онҳоро дастрас кардан мумкин аст. Ва дар зер, дар ҷадвал нишон дода шудааст, ки чӣ гуна шумо метавонед ба an objectи мушаххас дастрасӣ пайдо кунед.

Функсияҳои JSP

Акнун биёед ба саҳифаи қаблӣ баргардем ва ба рамзи сарчашмаи саҳифаи "an objectҳои пинҳон" назар андозем: 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 доираи васеи вазифаҳоро барои интихоб ва инчунин қобorяти эҷоди вазифаҳои шахсии худро фароҳам меорад. Барои истифодаи функсия дар JSP, шумо бояд китобхонаи мувофиқеро ворид кунед, ки дар он функсия ба файли JSP муайян шудааст.

Китобхонаҳои тег

Биёед як сатри дигари codeи сарчашмаро (сатри дуюм) дар боло бубинем:
<%@ 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 фирор мекунад. Ин функсия аз нуқтаи назари амният муҳим аст, зеро тавассути баровардани арзиши тағирёбандаҳо мустақиман тавассути ${variable}, мо дари инъекцияи скриптро мекушоем.

Таҳрири JSP

Акнун, ки бо донишҳои нав муҷаҳҳаз шуда, биёед кӯшиш кунем, ки ба барномаи намоишии дохor Tomcat тағирот ворид кунем. Барои ин, мо codeи сарчашмаи ин саҳифаро дар дохor ҷузвдоне пайдо мекунем, ки дар он контейнери сервлет насб шудааст. Ин файлро дар суроғаи зерин пайдо кардан мумкин аст: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Сипас файли implicit-objects.jsp-ро дар ягон муҳаррири матн кушоед Импорти китобхонаи асосиро илова кунед , ва баъд аз он истифода баред. Биёед матнро бароварем: JSP чист?  Фаҳмидани имкониятҳо дар амал - 12Акнун биёед саҳифаи an objectҳои пинҳоншударо навсозӣ кунем ва тағиротҳои воридшударо бубинем: JSP чист?  Фахмидани имкониятхо дар амал — 13

Натиҷаҳо

Ҳамин тавр, мо чунин технологияро, ба монанди JSP, рӯякӣ тафтиш кардем. Мо муҳокима кардем:
  • JSP чист;
  • Сохтори саҳифаи JSP;
  • тартиби насб ва ба кор андохтани контейнери сервлети Tomcat;
  • барномаи намоишӣ барои дастрасӣ ба an objectҳои пинҳон, ки ба бастаи тақсимоти serverи Tomcat дохил карда шудааст;
  • Функсияҳои JSP ва китобхонаҳои барчасп.

Баъд чӣ?

Барои муҳофизат кардани мавод шумо метавонед:
  1. Ҳама чизро дар ин мақола такрор кунед.
  2. Дигар барномаҳои намоиширо, ки ба serverи Tomcat дохил карда шудаанд, баррасӣ кунед.
  3. Аризаи шахсии худро нависед ва онро дар як контейнери сервлет ҷойгир кунед. Ҳамчун дастур, шумо метавонед мақоларо истифода баред Сохтани лоиҳаи веби оддӣ дар IntelliJ Idea Enterprise. Қадам ба қадам, бо тасвирҳо.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION