JavaRush /Java Blog /Random-TK /Servlets we jsp ulanyp ýönekeý web programmasyny döretmek...

Servlets we jsp ulanyp ýönekeý web programmasyny döretmek (1-nji bölüm)

Toparda çap edildi
Makala düşünmek üçin zerur bilim derejesi: Java Core-ä eýýäm has az düşünipdiňiz we JavaEE tehnologiýalaryna we web programmirlemelerine seretmek isleýärsiňiz. Häzirki wagtda makala ýakyn mowzuklary öz içine alýan Java kolleksiýa gözlegini öwrenýän bolsaňyz, iň manysy bar. Bu material , “IntelliJ Idea Enterprise” -de ýönekeý web taslamasyny döretmekServlets we jsp (1-nji bölüm) - 1 ulanyp, ýönekeý web programmasyny döretmek makalamyň logiki dowamy . Onda işleýän web taslama şablonyny nädip döretmelidigini görkezdim. Bu gezek Java Servlet API we JavaServer Pages API tehnologiýalaryny ulanyp, ýönekeý, ýöne owadan web programmasyny nädip döretmelidigini görkezerin. Programmamyzda iki baglanyşyk bilen baş sahypa bolar:
  • ulanyja sahypa goşmak;
  • ulanyjy sanawyny görmek sahypasyna.
Entegem IntelliJ Idea Enterprise Edition, Apache Maven (diňe birnäçe garaşlylygy goşuň) we Apache Tomcat ulanaryn. Netijede, W3.CSS çarçuwasyny ulanyp, programmamyzy “bezäris” . Häzirki wagtda bu ýerde ösdürjek boş proýektiňiz bar diýip çaklaýarys. Notok bolsa, birinji makalany gözden geçiriň. Diňe birnäçe minut gerek bolar :)

Geljekdäki programmanyň gurluşy barada azajyk

Esasy sahypamyz ( / ) sözbaşy we iki baglanyşyk / düwme bilen iň adaty statiki html sahypasy bolar:
  • täze ulanyjy goşuň (iberiler / goşular );
  • ulanyjylaryň sanawyny görüň (iberýär / sanawa ).
Tomcat bu salgylara haýyşlary alar we olary etjek iki hyzmat edişimiziň birine iberer (kartalaşdyryşy web.xml faýlynda suratlandyrarys ). Hyzmatkärler hem öz gezeginde haýyşlary gaýtadan işlärler, maglumatlary taýýarlarlar (ýa-da ulanyjy goşulan halatynda saklarlar) we gözegçiligi degişli jsp faýllaryna geçirer, bu bolsa eýýäm netijäni “görkezer”. Maglumatlary iň köp ýaýran sanawda (Sanaw) saklarys.

Statik baş sahypa döredeliň

Web bukjanyňyzda index.jsp bar bolsa , pozuň. Munuň ýerine, bu bukjada index.html atly ýönekeý html faýly dörederis :
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My super project!</title>
</head>
<body>
    <!-- header -->
    <div>
        <h1>Super app!<//h1>
    </div>

    <div>       <!-- content -->
        <div>    <!-- buttons holder -->
            <button onclick="location.href='/list'">List users<//button>
            <button onclick="location.href='/add'">Add user<//button>
        </div>
    </div>
</body>
</html>
Bu ýerde çylşyrymly zat ýok. Adynda sahypamyzyň adyny görkezýäris. Sahypanyň mazmunynda iki sany esasy bölünişik bar: sözbaşy (sözbaşy) we mazmun (mazmun). Mazmunda düwmelerimiz üçin saklaýjymyz bar we basylanda degişli salgylara iberilýän iki düwme bar. Taslamany işledip, häzirki görnüşine seredip bilersiňiz. Düwmelere bassaňyz, 404 säwlikli sahypalar açylýar, sebäbi bizde entek ýok. Emma bu düwmeleriň işleýändigini görkezýär. Munuň iň uniwersal warianty däldigini belläsim gelýär, sebäbi birden JavaScript ýapylan bolsa, bu düwmeler brauzerde peýdasyz bolar. Javaöne hiç kim JavaScript-i ýapmady diýip çaklaýarys :). Simpleönekeý baglanyşyklaryň ulanylyp bilinjekdigi düşnüklidir, ýöne düwmeleri has gowy görýärin. Iň gowy görýän zadyňyzy edýärsiňiz. Mysallarymda bölünişikleriň köp boljakdygyna seretmäň . Soň bolsa olary stil bilen doldurarys we hemme zat has owadan görüner :).

Netijäni bermek üçin jsp faýllaryny dörediň

Şol web katalogynda jsp faýllarymyzy goýjak bukja dörederis . Görüş diýdim, ýene-de üýtgedip bilersiňiz. Bu bukjada iki jsp faýly dörederis:
  • add.jsp - ulanyjylary goşmak üçin sahypa;
  • list.jsp - ulanyjylaryň sanawyny görkezmek üçin sahypa.
Olara degişli sahypa sözbaşylaryny bereliň. "Täze ulanyjy goş" we "Ulanyjylaryň sanawy" ýaly bir zat, biz häzirlikçe şeýle goýarys.

Iki sany servlet döredeliň

Hyzmatkärler Tomkatyň özlerine bermegini haýyş ederler we işlärler. Src / main / java bukjasynda çeşmelerimizi öz içine alýan programma bukjasyny dörederis. Şol ýerde has dürli paketlerimiz bolar. Şonuň üçin bu paketler biri-biriniň içinde döredilmezligi üçin, programma bukjasynda käbir synp döredeliň (soň pozuň). Indi programma bukjasynda üç dürli paket döredeliň :
  • subýektler - bu biziň guramalarymyzyň ýatjak ýeri (ulanyjy obýektlerini suratlandyrjak synpyň özi);
  • model - biziň modelimiz şu ýerde bolar (bu barada birneme soňrak);
  • servletler - gowy, ine, biziň hyzmatçylarymyz bolar.
Ondan soň, bu synpy programma bukjasyndan arkaýyn aýyryp bilersiňiz (elbetde döreden bolsaňyz). Servlets paketinde iki synp dörederis:
  • AddServlet - alnan / goşulan haýyşlary gaýtadan işleýär ;
  • ListServlet - / sanawda alnan haýyşlary gaýtadan işleýär .

Mawende baglylyklary birikdirmek

Tomcat 9-njy wersiýasy. * Servlet 4.0 wersiýasyny we JavaServer Pages 2.3 wersiýasyny ýerine ýetirýär. Bu, Tomcat 9-nyň resmi resminamalarynda ikinji setirdäki birinji abzasda ýazylýar. Diýmek, siz hem meniň ýaly Tomcat-yň bu wersiýasyny ulanýan bolsaňyz, ýazmak we ibermek üçin iberýän kodumyz görkezilen wersiýalary ulanar. Emma bu aýratynlyklary taslamamyzda ulanmak isleýäris, şonuň üçin olary ulanýan kodumyz iň bolmanda üstünlikli jemlener. Munuň üçin olary taslamamyza ýüklemeli. Maven kömege gelýär.

Umumy düzgün şu: Maven ulanyp, taslamaňyza bir zat birikdirmeli bolsaňyz:

  • Maven ammar web sahypasyna giriň;
  • zerur kitaphanany we zerur wersiýany gözläň;
  • pom.xml-e girizilmeli garaşlylyk koduny alarsyňyz;
  • sal! :)
Geliň, başlalyň. Ilki bilen pom faýly taýýarlalyň . Bir ýerden / wersiýadan soň , ýöne / taslamadan öň aşakdakylary goýuň:
<dependencies>

</dependencies>
Şeýlelik bilen, bu bellikleriň içinde zerur garaşlylygy sanap geçjekdigimizi görkezdik. Indi mvnrepository.com sahypasyna giriň , ýokarsynda gözleg meýdançasy bolar. Ilki bilen gözlegde servlet giriziň. Sevenedi müňden gowrak ulanylyş bar bolan ilkinji netije bize laýyk gelýär. 4.0 wersiýasynyň gerekdigini ýadymyzdan çykarmaýarys (Tomcat 9 üçin; beýleki wersiýalary üçin köne amallar amatly bolup biler). Bu gaty soňky wersiýa, şonuň üçin ulanylyşy kän däl, ýöne bize gerek. Dürli paket dolandyryjylary üçin bu garaşlylygyň koduny alyp boljak sahypa açylar we hatda göçürip alyp bilersiňiz. Emma ony Maven ulanyp birikdirmek isleýänimiz üçin, Maven goýmasyndaky kody saýlaýarys. Baglylyk bölüminiň içinde pom faýlymyza göçürýäris. IDEA-nyň aşaky sag burçunda awto-importy işletmek isleýändigimizi ýa-da ýokdugymyzy görkezýän bildiriş peýda bolsa, ylalaşýarys. Eger tötänleýin boýun gaçyran bolsaňyz, "Sazlamalar" -a giriň we el bilen awtomatiki import etmegi işjeňleşdiriň: Sazlamalar (Ctrl + Alt + S) -> Gurmak, ýerine ýetirmek, ýerleşdirmek -> Maven -> Import etmek Munuň üçin pom faýly we IDEA konfigurasiýa faýllaryny saklar sinhron taslama. Indi şol bir prinsipi ulanyp, JavaServer Pages 2.3 wersiýasyny taparys we birikdireris (gözlegde jsp giriň). Maweni eýýäm ele alanymyzdan soň, derrew çeşmelerimiziň Java 8 sintaksisine laýyk gelýändigini we şol bir wersiýanyň kod kody bilen düzülmelidigini derrew aýdalyň. Bu manipulýasiýalardan soň, pom.xml biziň ýaly bir zat görüner:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.javarush.info.fatfaggy</groupId>
    <artifactId>my-super-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compile.source>
        <maven.compiler.target>1.8</maven.compile.target>
    </properties>

    <dependencies>
        <!-- Servlet API 4.0 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- JavaServer Pages API 2.3 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Hyzmatlarymyzy hakyky hyzmat etmek

Bu pursatda, döreden jübüt hyzmatlarymyz diňe adaty sapaklar. Olarda hiç hili funksiýa ýok. Nowöne indi “Servlet API” -ni taslamamyz bilen baglanyşdyrdyk, eger şeýle bolsa, ol ýerden sapaklary ulanyp bileris. Hyzmatlarymyzy “hakyky” hyzmat etmek üçin, olary HttpServlet synpyndan miras almaly .

Kartalaşdyrmak ýa-da bölmek

Indi haýsydyr bir görnüşde Tomkata aýtmak / goşmak haýyşlary AddServlet servletimiz tarapyndan dolandyrylar we şonuň üçin / sanawdan gelen haýyşlar ListServlet servlet tarapyndan amala aşyrylar diýsek gowy bolardy . Bu prosese kartalaşdyrmak diýilýär . Bu web.xml faýlynda şu ýörelge laýyklykda edilýär :
  • ilki bilen servleti suratlandyrýarys (käbir at berýäris we synpyň özüne barýan ýoly görkezýäris);
  • soň bu hyzmaty belli bir adrese baglaýarys (hyzmatyň adyny ýaňy beren hyzmatymyzy görkezýäris we haýyşnama haýsy hyzmatdan iberilmelidigini görkezýäris).
Serwleti suratlandyralyň:
<servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>app.servlets.AddServlet</servlet-class>
</servlet>
Indi ony adrese baglaýarys:
<servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
Görşüňiz ýaly, hyzmatyň ady iki ýagdaýda-da birmeňzeş. Munuň netijesinde Tomcat haýyş / goşmak salgysyna gelse, app.servlets.AddServlet servletine geçirilmelidigini bilýär . Ikinji servlet bilenem edil şonuň ýaly edýäris. Netijede, web.xml web sahypamyzda takmynan aşakdaky mazmun bar:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- add servlet -->
    <servlet>
        <servlet-name>add</servlet-name>
        <servlet-class>app.servlets.AddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>add</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

    <!-- list servlet -->
    <servlet>
        <servlet-name>list</servlet-name>
        <servlet-class>app.servlets.ListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>list</servlet-name>
        <url-pattern>/list</url-pattern>
    </servlet-mapping>
</web-app>
.Eri gelende aýtsak, bu ýerde (at / ) baş sahypa üçin bellik döretmedik . Hakykat, bu ýagdaýda bize zerurlyk ýok. Baş sahypamyz, diňe iki düwmäni görkezýän ýönekeý html faýly . Dinamiki mazmun ýok, şonuň üçin adresden haýyşlar / iberiljek we käbir jsp- a ýerine ýetirilişden başga hiç zat etmeýän (munuň hem bolmalysy ýaly aýratyn hyzmat) döretmegimiziň manysy ýok. döredildi), çekerdi Diňe iki düwme bar bolsa. Bize munuň zerurlygy ýok, statiki çeşmeden hoşal. Tomcat haýyşy alanda, haýyşy şeýle salgyda işläp bilýän ýekeje hyzmatçynyň ýokdugyny barlar we şondan soň bu salgyda üstünlikli iberjek taýýar html faýlynyň bardygyny görer. . Programmamyzy täzeden işledip bileris (serweri täzeden açyň ýa-da isleýşiňiz ýaly täzeden ýerleşdirip bileris) we düwmäniň üstüne basanymyzda esasy sahypanyň görkezilendigine, hiç zadyň bozulmajakdygyna göz ýetirip bileris, ýöne häzirlikçe ýalňyşlyk hem bar ýazylan. Theeri gelende aýtsak, öň 404 ýalňyşlyk bar bolsa, indi 405 bar. Diýmek, kartalaşdyrmak işledi, hyzmatkärler tapyldy, ýöne haýyşy işlemek üçin amatly usullar ýokdy. Bu etapda henizem 404 ýalňyşlyk bar bolsa, hemme zat dogry ýerine ýetirilen bolsa, belki ideýadaky ýerleşdiriş konfigurasiýasyny düzetmeli. Munuň üçin konfigurasiýalary redaktirlemäge (başlangyç düwmesiniň ýokarsynda), penjiräniň sag tarapyndaky Gurnama goýmasyna girmeli we Programma kontekstinde ýönekeý görkezilendigine göz ýetirmeli /

Gysga liriki many: “kapotyň aşagynda” näme bolýar?

Tomkatda programmamyzyň nähili işleýändigi hakda eýýäm pikir eden bolsaňyz gerek? Ol ýerde näme bolýar? Esasy () usul nirede ? Brauzeriňize “localhost: 8080” ýazyp , şu adrese giren badyňyza, brauzer http protokoly arkaly bu adrese haýyş iberýär . Islegleriň dürli “görnüşlerde” bolup biljekdigine, iň meşhurlarynyň GET we POST bolup biljekdigine eýýäm düşünersiňiz diýip umyt edýärin . Her haýyşyň jogaby bolmaly. GET haýyşy, jogap hökmünde oňa brauzere gaýtaryljak taýýar html kody berler we brauzer bu kody her dürli harplar, düwmeler we görnüşler bilen owadanlaşdyrar. POST haýyşy birneme has gyzykly, sebäbi özi bilen käbir maglumatlary hem alyp barýar. Mysal üçin, ulanyjyny hasaba almak ýa-da ygtyýarnama görnüşinde maglumatlaryňyzy girizdiňiz we "ibermek" düwmesine basdyňyz. Häzirki wagtda içindäki şahsy maglumatlaryňyz bilen serwere POST haýyşy iberildi. Serwer bu maglumatlary kabul etdi, gaýtadan işledi we haýsydyr bir jogap berdi (mysal üçin, profiliňiz bilen html sahypasy ). Olaryň arasyndaky düýpli tapawut, GET haýyşlary diňe serwerden maglumat almak üçin niýetlenendir, POST haýyşlary bolsa käbir maglumatlary özleri bilen alyp barýar we serwerdäki maglumatlar üýtgäp biler (mysal üçin, suratyňyzy serwere ýükläniňizde) POST haýyşynda uçar we serwer ony maglumatlar bazasyna goşar, ýagny käbir üýtgeşmeler bolar. Indi Tomkata gaýdyp geleliň. Müşderiden haýsydyr bir haýyş alanda, adrese seredýär. Maglumatlaryny gözleýär şunuň ýaly adrese (ýa-da derrew yzyna gaýtaryp boljak taýýar çeşme) haýyşlary gaýtadan işleýän laýyk serwetiň bardygyny ýa-da ýokdugyny görüň. Eger yzyna gaýtaryp boljak zat tapmasa, html sahypasy bilen jogap bermeýär, ýöne 404 jogap bilen. Bu salgyda "oturan" laýyk hyzmatçy tapylsa, haýsy haýyşy alandygyna seredýär (GET, POST ýa-da başga bir zat), soň bolsa hyzmatçydan munuň usuly barmy diýip soraýar. Hyzmatyň bu görnüşini gaýtadan işläp bilmejekdigini aýdýan bolsa, Tomcat müşderä 405 kody bilen jogap berýär. Bu ýaňy-ýakynda bolup geçen zat. Suitableöne amatly hyzmat tapylsa we amatly usuly bar bolsa, Tomcat bu hyzmatyň obýektini döredýär, serwletiň aýratyn sapakda işlemegine mümkinçilik berýän täze sapakda ( sapakda ) işleýär we Tomcat mundan beýläk hem işlemegini dowam etdirýär. özbaşdak, haýyşlary kabul edýär we iberýär. Mundan başga-da, Tomcat ýene iki obýekt döredýär: biri HttpServletRequest görnüşi (geljekde gysgaça haýyş bilen atlandyraryn), ikinjisi HttpServletResponse(Muňa jogap diýerin). Birinji obýektde, müşderiniň haýyşy boýunça alnan ähli maglumatlary ýerleşdirýär, şonuň üçin ähli maglumatlar bu obýektden çykarylyp bilner. Bularyň hemmesinden soň, bu iki obýekti aýratyn sapakda işleýän serwletiň degişli usulyna geçirýär. Serwlet işini gutarandan we müşderä ibermäge taýyn jogap beren badyna Tomkata "Men gutardym, hemme zat taýyn" diýip baýdak galdyrýar. Tomcat jogaby kabul edýär we müşderä iberýär. Bu, Tomkata haýyşlary kabul etmäge we jogaplary bökdençsiz ibermäge mümkinçilik berýär, şol bir wagtyň özünde ähli işler aýratyn sapaklarda işleýän hyzmatkärler tarapyndan amala aşyrylýar. Şoňa laýyklykda servlet kody ýazanymyzda ýerine ýetiriljek işi kesgitleýäris. Hawa, esasy () usuly Tomkatyň özünde (hawa, Java-da ýazylan) diýip pikir edip bilersiňiz we Tomkat "başlanymyzda" main().

GET usullaryny servletler bilen alýarys we ýönekeý jogaplary iberýäris

Häzirki wagtda hyzmatkärlerimizde amatly usullar ýok (GET), şonuň üçin Tomcat bize 405 ýalňyşlyk gaýtaryp berýär. Geliň! Hyzmatlarymyzy miras alýan HttpServlet synpymyz dürli usullary kesgitleýär . Usullar üçin käbir kod bellemek üçin, olary diňe ýok edýäris. Bu ýagdaýda iki hyzmatda doGet () usulyny ýok etmeli .
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
Görşüňiz ýaly, bu usul iki zady kabul edýär: req (haýyş) we resp (jogap). Tomkatyň bu hyzmatda degişli usuly çagyranda, biziň üçin döredjek we köpeltjek zatlary. Ilki bilen iň ýönekeý jogaplary edeliň. Munuň üçin jogap obýektini alyň we ondan jogap ýazmak üçin ulanyp boljak “PrintWriter” obýektini alyň. Dogrusy, ulanyp, ýönekeý setir çap ederis.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("Method GET from AddServlet");
}
“ListServlet” hyzmatynda şuňa meňzeş bir zat ederis , şondan soň serwerimizi täzeden başlarys. Görşüňiz ýaly hemme zat işleýär! Düwmelere basanyňyzda, “ PrintWriter” bilen “ýazan” tekstimiz bilen sahypalar açylýar . Diňe jogaplar bilen sahypalary döretmäge taýýarlan jsp -larymyz hiç hili ulanylmaýar. Sebäbi ýerine ýetiriş diňe olara ýetip bilmeýär. Serwerletiň özi indi jogap döredýär we Tomkata müşderi üçin taýyn jogabynyň bardygyny görkezip, işini tamamlaýar. Tomcat bu jogaby diňe müşderä iberýär. Dolandyryşy servletlerden jsp-a geçirýäris , geliň usullarymyzyň koduny şu görnüşde üýtgedeliň:
  • haýyş obýektinden haýyş dolandyryjy obýektini alýarys, şol ýerde gözegçiligi geçirmek isleýän sahypamyzyň jsp adresini geçirýäris;
  • alnan obýekti ulanyp, dolandyryşy görkezilen jsp sahypasyna geçirýäris we Tomkatdan alan haýyşymyzy we jogap obýektlerimizi şol ýere dakmagy ýatdan çykarmaň.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
Jsp sahypalarynyň içinde (beden belliginiň içinde) haýsy sahypanyň görkezilýändigini anyk görmek üçin bir zat ýazyp bileris. Ondan soň serweri täzeden başlaýarys we barlaýarys. Esasy sahypadaky düwmeler basylýar, sahypalar açylýar, bu haýyşlar hyzmatçylara iberilýär, şondan soň gözegçilik eýýäm berlen jsp sahypalaryna geçirilýär. Bu hemmesi. Makalanyň indiki bölüminde programmamyzyň işleýşi barada durup geçeris.

Başga näme okamaly:

IntelliJ Idea Enterprise-de ýönekeý web taslamasyny döretmek. Suratlar bilen ädimme-ädim


Söhbetdeşligim
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION