JavaRush /Java блогу /Random-KY /JSP деген эмне? Келгиле, мүмкүнчүлүктөрдү иш жүзүндө изил...
Анзор Кармов
Деңгээл
Санкт-Петербург

JSP деген эмне? Келгиле, мүмкүнчүлүктөрдү иш жүзүндө изилдеп көрөлү

Группада жарыяланган
JSP же Java Server Pages Java колдонмолору үчүн динамикалык веб-баракчаларды түзүүгө мүмкүндүк берген Java технологиясы. Бул макалада биз JSP деген эмне жөнүндө кененирээк сүйлөшөбүз, бул технологиянын кээ бир мүмкүнчүлүктөрүн талкуулайбыз, JSP баракчаларынын структурасын карап чыгабыз, ошондой эле Java Server Pages деген эмне экенин практикалык жактан карап көрүүгө аракет кылабыз. JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 1Бирок адегенде JSPтин артыкчылыктары жана маанилүүлүгү жөнүндө сөз кылалы. JSP иштеп чыгуучуга төмөнкүлөргө мүмкүндүк берет:
  • Java codeуна интернет баракчасынан маалыматтарды алуу;
  • Java codeунан веб-баракчага маалыматтарды жөнөтүү;
  • Java codeун түз html ичине жазыңыз (бирок сиз муну кыянаттык менен колдонбошуңуз керек).
JSP бorмге болгон муктаждык бир нече себептерден улам абдан жогору бааланышы мүмкүн:
  • JSP негизги Java веб-технологияларынын бири болуп саналат;
  • JSP көпчүлүк компанияларда жана долбоорлордо кеңири колдонулат;
  • JSP сервлет контейнеринин ичиндеги Java сервлеттери менен кемчorксиз интеграцияланат.

JSP аныктамасы

Бул жерде Wikipedia аныктамасы: JSP (JavaServer Pages) веб-иштеп чыгуучуларга статикалык жана динамикалык компоненттери бар мазмунду түзүүгө мүмкүндүк берген технология. JSP барагы тексттин эки түрүн камтыйт: HTML, SVG, WML же XML текст форматтарынын биринде болушу мүмкүн болгон статикалык булак маалыматтары жана динамикалык мазмунду түзүүчү JSP элементтери. Кошумчалай кетсек, JSP тег китепканаларын, ошондой эле Java codeун JSP баракчаларынын статикалык мазмунуна киргизүү үчүн Expression Language (EL) колдонсо болот. JSP бет codeу Jasper JSP бет компилятору аркылуу сервлеттин Java codeуна которулуп, андан кийин Java Virtual Machine (JVM) byte codeуна түзүлөт. JSP баракчаларын аткарууга жөндөмдүү сервлет контейнерлери платформадан көз карандысыз Java тorнде жазылган. JSP технологиясы веб-тиркемелерди иштеп чыгуу үчүн платформадан көз карандысыз, көчмө жана оңой кеңейтилүүчү технология.

JSP бет түзүмү

Жалпысынан алганда, JSP динамикалык веб-баракчаларды билдирет, алардын динамикалык бөлүгү Java, ал эми статикалык бөлүгү белгилөө тилдери, көбүнчө HTML аркылуу түзүлөт. Мындай барак JSP элементтери (же JSP тэгдери) менен кесorшкен белгилөө тилдеринин биринде (мисалы, HTML, SVG, WML жана XML) жазылган .jsp кеңейтүүсү бар текст documentи. Бул тегдер server codeуна (маалыматтарга) чалууларды камтыйт жана ошондой эле кээ бир эсептөөлөрдү жүргүзөт. Бул файлдар serverде иштетилет, анын натыйжасында бардык JSP тегдери html тегдерине айландырылат жана натыйжасы кадимки html баракчасы болуп саналат. Төмөнкү диаграмма JSP баракчасынын структурасынын диаграммасын жана анын server менен өз ара аракеттенүүсүн көрсөтөт. JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 2Жөнөкөй JSP барагынын мисалы:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
Бул мисалда, атайын тилде жазылган JSP туюнтмасы, Expression Language (EL) html codeунун ичинде "киргизилген" . Ал презентация катмары (веб баракчалар) менен тиркеме бизнес логикалык катмарынын (Java codeу) ортосундагы өз ара аракеттенүүнүн маанилүү механизмин камсыз кылат. Мисалдан көрүнүп тургандай, JSP туюнтмасы тармал кашаалардын ичинде, алдыңкы доллар белгиси менен - ${...}​​. Тармал кашаанын ичиндеги нерселердин баары serverде бааланат жана бул туюнтуунун натыйжасы htmlде, JSP туюнтмасы алгач аныкталган жерде берилет. Бардык тегдерди иштеп чыккандан кийин, барак төмөнкүдөй болот:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

Сервлет контейнерин орнотуу жана иштетүү

JSP codeу Java сервлет codeуна которулгандыктан, JSP кандайча иштээри жөнүндө сүйлөшө алышыбыз үчүн кандайдыр бир сервлет контейнерин алышыбыз керек. Болбосо, контейнерсиз JSP иштебейт. Бирок адегенде сервлет контейнеринин аныктамасын карап көрөлү. Сервлет контейнери – бул сервлеттерге системалык колдоо көрсөтүүчү жана спецификацияларда аныкталган эрежелерге ылайык алардын жашоо циклин камсыз кылуучу server болгон программа. Ал толук кандуу көз карандысыз веб-server катары иштей алат, башка веб-server үчүн барак провайдери боло алат же Java EE колдонмо serverине интеграцияланышы мүмкүн. Эң популярдуу сервлет контейнерлеринин бири - Apache Tomcat. JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 3Белгилей кетсек, Tomcat толук кандуу Java EE колдонмо serverи эмес. Бирок, сервлеттердин жана JSP баракчаларынын маанилүү муктаждыктары үчүн Tomcat serverи жетиштүү. Орнотууну баштайлы. Сиз Tomcat'ты расмий баракчадан жүктөп алсаңыз болот . Windows OS үчүн Tomcatты төмөнкүдөй орното аласыз:
  1. 32-бит/64-бит Windows Кызмат Орнотуучусун жүктөп алыңыз.

  2. Келгиле, файлды иштетели.

  3. Андан кийин, кадимки орнотуу proceduresасын аткарыңыз:

    1. Тиешелүү орнотуучу терезеде Мисалдар кутучасын белгилөөнү унутпаңыз:

      JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 4
    2. жана алдын ала орнотулган JREге жолду көрсөтүңүз:

      JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 5
  4. Орнотуудан кийин, Tomcat иштетип, браузерди ачыңыз. http://localhost:8080/ дарегине өтүңүз .

Эгер сиз Tomcat баштапкы барагын көрсөңүз, бул орнотуу ийгorктүү болгонун жана server иштеп жатканын билдирет. Tomcat'ти кол менен баштоо жана токтотуу үчүн бин каталогундагы эки аткарылуучу файлдын бирин иштетсеңиз болот. Ал Tomcat орнотулган каталогдун ичинде жайгашкан: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 6

Демо колдонмолор. Жашырылган an objectтер

Келгиле, кээ бир JSP функцияларын карап көрөлү. Алардын бири жашыруун an objectилер деп аталган мүмкүнчүлүк болуп саналат ( Implicit Objects ). Бул Expression Language (EL) аркылуу кирүүгө мүмкүн болгон an objectтер. Мындай an objectтердин мисалдары HTTP аталыштары же URL параметрлери. Келгиле, URL параметрлери кандай экенин ачып берели (же эс тутумубузду жаңыртабыз). Төмөндөгү мисалда параметрлери бар URL көрсөтүлгөн. Параметрлер кара тамга менен жазылган: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Параметрлер дайыма суроо белгиси менен башталат (?). Андан кийин параметрдин аталышы, андан кийин теңдик белгиси коюлат – параметрдин мааниси аныкталат. Бир нече же бир параметр болушу мүмкүн. Эгерде бирден ашык болсо, ар бир ат-маани түгөйү амперанд белгиси (&) менен бөлүнөт. Жогорудагы мисалда бир нече параметрлер жана алардын баалуулуктары аныкталган:
Параметр аты Параметрдин мааниси
param1 маани1
param2 маани 2
а 1
аты Том
Келгиле, сиз JSPдеги жашыруун an objectтерге, анын ичинде URL параметрлерине кантип кире аларыңызды карап көрөлү. Бул үчүн, Tomcatти ишке киргизиңиз жана http://localhost:8080/ баракчасында браузерди ачыңыз. Андан кийин Мисалдар барагына өтүңүз: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 7Андан кийин JSP шилтемесин аткарыңыз Мисалдар: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 8Мисалдар бетинде шилтемени ээрчиңиз Implicit Objects -> Execute: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 9Бул боюнча бетте сиз жашыруун an objectтерди колдонуунун мисалын көрө аласыз. Төмөндө барактын скриншоту кеңири түшүндүрмөлөр менен берилген: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 10Параметрдин маанисин fooбарактагы тиешелүү талааны колдонуп өзгөртүп көрүңүз, андан кийин дарек тилкесинде бул параметрдин мааниси да өзгөргөнүн байкаңыз. Сунушталган барактын көп функционалдуулугу жок, бирок бул жакшы маалымдама, сиз келечекте белгилүү бир жашыруун an objectке кирүү керек болгондо кайрыла аласыз. Бул баракта кирүүгө мүмкүн болгон жашыруун an objectтердин тизмеси бар. Ал эми төмөндө, tableда, белгилүү бир an objectке кантип кире ала тургандыгы көрсөтүлгөн.

JSP функциялары

Эми мурунку бетке кайрылып, "жашыруун an objectилер" барагынын баштапкы codeун карап көрөлү: 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 менен тааныш болсоңуз, анда барактын баштапкы codeу сизге так болушу керек. Бул саптарга көңүл буруңуз:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
Бул жерде биз html тегдерин <tr>жана <td>. Tagдерден кийин <td>тармал кашааларга оролгон JSP тэгдери турат ${ }. Бирок, URL параметринин мааниси кандайча чыгарылганына көңүл буруңуз foo:
${fn:escapeXml(param["foo"])}
Маани JSP функциясын колдонуу аркылуу чыгарылат fn:escapeXml(). JSP функциялары кайра колдонула турган кээ бир функцияларды камтыйт. Бул учурда, ал XML качып жатат. JSP технологиясы тандоо үчүн функциялардын кеңири спектрин, ошондой эле өз функцияларыңызды түзүү мүмкүнчүлүгүн берет. JSPде функцияны колдонуу үчүн, сиз JSP файлына функция аныкталган тиешелүү китепкананы импорттооңуз керек.

Tag китепканалары

Жогорудагы баштапкы codeдун дагы бир сабын (экинчи сап) карап көрөлү:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Tag китепканалары ушундайча импорттолот. Синтаксис интуитивдик. Биз бир нече нерсени аныктайбыз:
  • 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ун ушул сервлет контейнери орнотулган папканын ичинен табабыз. Бул файлды төмөнкү даректен тапса болот: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Андан кийин каалаган текст редакторунда implicit-objects.jsp файлын ачыңыз. Негизги китепкананын импортун кошуңуз , анан аны колдонуңуз Келгиле, бир аз текст чыгаралы: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 12Эми жашырылган an objectтер барагын жаңыртып, киргизилген өзгөртүүлөрдү карап көрөлү: JSP деген эмне?  Мүмкүнчүлүктөрдү иш жүзүндө түшүнүү - 13

Жыйынтыктар

Ошентип, биз JSP сыяктуу технологияны үстүртөн карап чыктык. Биз талкууладык:
  • JSP деген эмне;
  • JSP бет түзүмү;
  • Tomcat сервлет контейнерин орнотуу жана иштетүү тартиби;
  • Tomcat serverинин бөлүштүрүү пакетине кирген жашыруун an objectтерге кирүү үчүн демо тиркеме;
  • JSP функциялары жана тег китепканалары.

Кийинкиси эмне?

Материалды камсыз кылуу үчүн сиз:
  1. Бул макалада сүрөттөлгөн баарын кайталаъыз.
  2. Tomcat serverинде камтылган башка демо тиркемелерди карап көрүңүз.
  3. Өз арызыңызды жазыңыз жана аны сервлет контейнерине орнотуңуз. Колдонмо катары IntelliJ Idea Enterprise ичинде жөнөкөй веб-долбоорду түзүү макаласын колдоно аласыз. Кадам-кадам, сүрөттөр менен.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION