JavaRush /Blog Jawa /Random-JV /Nggawe aplikasi web prasaja nggunakake servlets lan jsp (...

Nggawe aplikasi web prasaja nggunakake servlets lan jsp (bagean 1)

Diterbitake ing grup
Tingkat kawruh sing dibutuhake kanggo mangerteni artikel kasebut: sampeyan wis luwih utawa kurang ngerti Java Core lan pengin ndeleng teknologi JavaEE lan pemrograman web. Iku ndadekake pangertèn sing paling apik yen sampeyan lagi sinau nggoleki Java Collections, sing nyakup topik sing cedhak karo artikel kasebut. Nggawe aplikasi web prasaja nggunakake servlets lan jsp (bagean 1) - 1Materi iki minangka tutugan logis saka artikelku Nggawe proyek web prasaja ing IntelliJ Idea Enterprise . Ing kono aku nuduhake carane nggawe template proyek web sing bisa digunakake. Wektu iki aku bakal nuduhake sampeyan carane nggawe aplikasi web sing prasaja nanging apik nggunakake teknologi Java Servlet API lan JavaServer Pages API. Aplikasi kita bakal duwe kaca ngarep kanthi rong tautan:
  • menyang pangguna nambah kaca;
  • menyang kaca tampilan dhaptar pangguna.
Aku isih bakal nggunakake IntelliJ Idea Enterprise Edition, Apache Maven (mung kalebu sawetara dependensi) lan Apache Tomcat. Ing pungkasan, kita bakal "nghias" aplikasi kita nggunakake kerangka W3.CSS . Kita bakal nganggep yen saiki sampeyan wis duwe proyek kosong, sing bakal dikembangake ing kene. Yen ora, bukak artikel pisanan lan gawe. Mung sawetara menit :)

A sethitik babagan struktur aplikasi mangsa

Kaca utama kita ( / ) bakal dadi kaca html statis sing paling biasa kanthi header lan rong pranala/tombol:
  • nambah panganggo anyar (bakal dikirim menyang /add );
  • ndeleng dhaptar pangguna (kirim menyang / dhaptar ).
Tomcat bakal nyekel panjalukan kanggo alamat kasebut lan ngirim menyang salah siji saka rong servlet sing bakal ditindakake (kita bakal njlèntrèhaké pemetaan ing file web.xml ). Lan servlets bakal ngolah panjalukan, nyiyapake data (utawa simpen yen pangguna ditambahake), lan transfer kontrol menyang file jsp sing cocog, sing bakal "nyedhiyakake" asil. Kita bakal nyimpen data ing dhaptar sing paling umum (Dhaptar).

Ayo nggawe kaca ngarep statis

Yen sampeyan duwe index.jsp ing folder web sampeyan , busak. Nanging, ing folder iki kita bakal nggawe file html prasaja disebut index.html :
<!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>
Ora ana sing rumit ing kene. Ing judhul kita nuduhake judhul kaca kita. Ing awak kaca kita duwe rong divs utama: header (header) lan isi (isi). Ing isi kita duwe wadhah kanggo tombol kita, lan bener loro tombol sing, nalika diklik, dikirim menyang alamat cocok. Sampeyan bisa mbukak proyek lan ndeleng kaya apa saiki. Yen sampeyan ngeklik tombol, kaca kanthi kesalahan 404 mbukak amarga kita durung duwe. Nanging iki nuduhake yen tombol bisa digunakake. Elinga yen iki dudu pilihan sing paling universal, amarga yen sampeyan tiba-tiba mateni JavaScript, tombol kasebut ora ana gunane ing browser. Nanging kita bakal nganggep ora ana sing mateni JavaScript :). Cetha yen pranala prasaja bisa digunakake, nanging aku luwih seneng tombol. Sampeyan nindakake apa sing paling disenengi. Lan aja ndeleng kasunyatan manawa ing contoku bakal ana akeh div . Banjur kita bakal isi karo gaya, lan kabeh bakal katon luwih ayu :).

Gawe file jsp kanggo menehi asil

Ing direktori web sing padha , kita bakal nggawe folder sing bakal dilebokake file jsp . Aku disebut views, lan maneh, sampeyan bisa improvise. Ing folder iki kita bakal nggawe rong file jsp:
  • add.jsp — kaca kanggo nambah pangguna;
  • list.jsp - kaca kanggo nampilake dhaptar pangguna.
Ayo menehi judhul kaca sing cocog. Soko kaya "Tambah pangguna anyar" lan "Dhaptar pangguna", lan kita bakal tetep kaya ngono.

Ayo nggawe rong servlet

Servlets bakal nampa lan proses panjalukan sing Tomcat bakal pass kanggo wong-wong mau. Ing folder src/main/java kita bakal nggawe paket app , sing bakal ngemot sumber kita. Ing kana kita bakal duwe paket liyane sing beda. Mulane, supaya paket iki ora digawe nang saben liyane, ayo nggawe sawetara kelas ing paket app (banjur mbusak). Saiki ayo nggawe telung paket beda ing paket app :
  • entitas - iki ngendi entitas kita bakal ngapusi (kelas kasebut dhewe, sing bakal nggambarake obyek pangguna);
  • model - model kita bakal ana ing kene (luwih akeh babagan iki mengko);
  • servlets - uga, iki bakal dadi servlets kita.
Sawise iki, sampeyan bisa mbusak kelas kasebut kanthi aman saka paket app (yen sampeyan nggawe, mesthi). Ing paket servlets kita bakal nggawe rong kelas:
  • AddServlet - bakal ngolah panjalukan sing ditampa ing /add ;
  • ListServlet - bakal ngolah panjalukan sing ditampa ing /list .

Nyambungake dependensi ing Maven

Tomcat versi 9.* ngleksanakake spesifikasi Servlet versi 4.0 lan JavaServer Pages versi 2.3. Iki ditulis ing dokumentasi resmi Tomcat 9 ing paragraf pisanan ing baris kapindho. Iki tegese yen sampeyan, kaya aku, nggunakake versi Tomcat iki, banjur kode sing kita tulis lan dikirim kanggo mbukak bakal nggunakake persis versi sing ditemtokake. Nanging kita pengin duwe spesifikasi kasebut ing proyek kita, supaya kode sing digunakake paling ora bisa dikompilasi. Lan kanggo iki, kita kudu ngemot menyang proyek kita. Iki ngendi Maven teka kanggo ngluwari.

Aturan umum yaiku: yen sampeyan kudu nyambungake menyang proyek sampeyan nggunakake Maven:

  • pindhah menyang situs web repositori Maven;
  • katon ana kanggo perpustakaan sing perlu lan versi sing perlu;
  • sampeyan entuk kode dependensi sing kudu dilebokake ing pom.xml;
  • nglebokake! :)
Dadi ayo miwiti. Pisanan, ayo nyiyapake file pom . Nang endi wae sawise / versi nanging sadurunge / project , lebokake ing ngisor iki:
<dependencies>

</dependencies>
Mangkono, kita nuduhake yen ing tag kasebut kita bakal dhaptar dependensi sing dibutuhake. Saiki pindhah menyang mvnrepository.com , bakal ana kolom telusuran ing sisih ndhuwur. Pisanan, ketik servlet menyang telusuran. Asil pisanan, ing ngendi ana luwih saka pitung ewu panggunaan, cocog karo kita. Kita elinga yen kita butuh versi 4.0 (kanggo Tomcat 9; kanggo versi liyane, implementasine lawas bisa uga cocog). Iki minangka versi sing cukup anyar, mula ora akeh panggunaan, nanging iki sing dibutuhake. A kaca bakal mbukak ngendi sampeyan bisa njaluk kode kanggo dependensi iki kanggo macem-macem manager paket lan sampeyan bisa malah mung ngundhuh. Nanging amarga kita pengin nyambungake nggunakake Maven, kita pilih kode ing tab Maven. Kita nyalin lan nempel menyang file pom ing bagean dependensi. Yen kabar katon ing pojok tengen ngisor IDEA takon apa kita pengin ngaktifake ngimpor otomatis, kita setuju. Yen sampeyan ora sengaja nolak, pindhah menyang "Setelan" lan aktifake ngimpor otomatis kanthi manual: Setelan (Ctrl + Alt + S) -> Mbangun, Eksekusi, Penyebaran -> Maven -> Ngimpor Iki bakal nyimpen file pom lan file konfigurasi IDEA kanggo iki. proyek ing sinkronisasi. Saiki, nggunakake prinsip sing padha, kita bakal nemokake lan nyambungake JavaServer Pages versi 2.3 (ketik jsp ing panelusuran). Lan wiwit kita wis dijupuk munggah Maven, ayo padha langsung marang iku sumber kita tundhuk karo Java 8 sintaks, lan padha kudu nyawiji menyang bytecode saka versi padha. Sawise kabeh manipulasi iki, pom.xml kita bakal katon kaya iki:
<?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>

Nggawe servlet kita dadi servlet nyata

Ing wektu iki, sawetara servlet sing wis digawe mung kelas biasa. Dheweke ora duwe fungsi. Nanging saiki kita wis nyambungake Servlet API kanggo proyek kita, lan, yen mangkono, kita bisa nggunakake kelas saka ing kono. Kanggo nggawe servlet kita "nyata" servlets, kita mung kudu oleh warisan saka kelas HttpServlet .

Pemetaan utawa partisi

Saiki luwih becik kanggo ngandhani Tomcat supaya panjaluk saka /add ditangani dening servlet AddServlet , mula panjaluk saka /list ditangani dening servlet ListServlet . Proses iki diarani pemetaan . Iki ditindakake ing file web.xml miturut prinsip iki:
  • pisanan kita njlèntrèhaké servlet (kita menehi sawetara jeneng lan nunjukaké path kanggo kelas dhewe);
  • banjur kita ikatan servlet iki menyang alamat tartamtu (kita nunjukaké jeneng servlet sing kita mung menehi lan nunjukaké alamat saka panjalukan kanggo servlet iki).
Ayo diterangake servlet:
<servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>app.servlets.AddServlet</servlet-class>
</servlet>
Saiki kita ikatan menyang alamat:
<servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
Nalika sampeyan bisa ndeleng, jeneng servlet padha ing loro kasus. Thanks kanggo iki, Tomcat ngerti yen panjalukan teka menyang /add alamat , iku kudu liwati menyang app.servlets.AddServlet servlet . Kita nindakake padha karo servlet kapindho. Akibaté, web.xml kita nduweni kira-kira isi ing ngisor iki:
<?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>
Miturut cara, kita ora nggawe markup kanggo kaca utama ing kene (ing / ). Kasunyatane yaiku ing kasus iki kita ora butuh. Kaca ngarep kita minangka file html prasaja sing mung nampilake rong tombol. Ora ana konten dinamis, mula ora ana gunane kanggo nggawe servlet sing kapisah, sing bakal dikirim menyang alamat / alamat , lan ora bakal nindakake apa-apa kajaba eksekusi transfer menyang sawetara jsp (sing uga kudu ditindakake. digawe), sing bakal nggambar Yen mung kita duwe rong tombol. Kita ora butuh iki; kita seneng karo sumber daya statis. Nalika Tomcat nampa panjaluk, bakal mriksa manawa ora ana siji-sijine servlet sing bisa ngolah panjaluk kasebut ing alamat kasebut, banjur bakal weruh manawa ing alamat iki ana file html sing wis siap , sing bakal dikirim kanthi sukses. . Kita bisa mbukak aplikasi maneh (wiwit maneh server utawa pasang maneh, kaya sing dikarepake) lan priksa manawa kaca utama diwenehake, ora ana sing rusak, nalika ngeklik tombol, transisi kedadeyan, nanging saiki ana kesalahan. ditulis. Miturut cara, yen sadurunge kita duwe kesalahan 404, saiki kita duwe 405. Iki tegese pemetaan makarya, servlets ditemokake, nanging mung ora duwe cara sing cocok kanggo proses panjalukan. Yen ing tahap iki sampeyan isih entuk kesalahan 404, sanajan kabeh wis rampung kanthi bener, mbok menawa sampeyan kudu mbenerake konfigurasi panyebaran ing ide kasebut. Kanggo nindakake iki, sampeyan kudu pindhah menyang Owahi konfigurasi (ing sisih ndhuwur cedhak tombol wiwitan), pindhah menyang tab Penyebaran ing sisih tengen jendhela lan priksa manawa ing konteks Aplikasi mung dituduhake /

Digression lirik sing cendhak: apa sing kedadeyan "ing hood"?

Sampeyan mbokmenawa wis kepingin weruh carane aplikasi kita bisa digunakake ing Tomcat? Ana apa ing kana? Lan ing ngendi metode utama () ? Sanalika sampeyan ngetik localhost:8080 menyang browser lan pindhah menyang alamat iki, browser ngirim panjalukan menyang alamat iki liwat protokol http . Muga-muga sampeyan wis ngerti manawa panjaluk bisa beda-beda "jinis", sing paling populer yaiku GET lan POST . Saben panjaluk mesthi ana wangsulan. Panjaluk GET ngarepake yen nanggepi bakal diwenehi kode html sing wis siap , sing bakal dibalekake menyang browser, lan browser bakal ngganti kode iki kanthi apik karo kabeh huruf, tombol, lan formulir. Panyuwunan POST luwih menarik, amarga uga nggawa sawetara informasi. Contone, ing registrasi pangguna utawa formulir wewenang, sampeyan ngetik data lan ngeklik "kirim". Ing wektu iki, panjalukan POST dikirim menyang server kanthi informasi pribadhi sampeyan ing njero. Server nampa informasi iki, ngolah lan ngasilake sawetara respon (contone, kaca html karo profil sampeyan). Bentenane dhasar ing antarane yaiku panjaluk GET mung dimaksudake kanggo nampa data saka server, dene panjaluk POST nggawa sawetara informasi, lan data ing server bisa uga diganti (contone, nalika sampeyan ngunggah foto menyang server, sampeyan bisa uga ngunggah foto menyang server. bakal mabur ing request POST lan server bakal nambah menyang database, sing, sawetara owah-owahan bakal kelakon. Saiki ayo bali menyang Tomcat. Nalika nampa sawetara panjalukan saka klien, iku katon ing alamat. Nggoleki data kanggo ndeleng yen ana servlet cocok, kang bakal proses panjalukan kanggo alamat kuwi (utawa sumber siap-digawe sing bisa langsung bali). karo nanggepi 404. Yen nemokake servlet cocok, kang "njagong" ing alamat iki, katon ing apa jinis request ditampa (GET, POST, utawa sawetara liyane), lan banjur takon servlet yen wis cara sing bisa nangani jinis request. Yen servlet ngandika, sing ora bisa proses jinis iki, Tomcat nanggapi klien karo kode 405. Iki apa mung kedaden kanggo kita. Nanging yen servlet sing cocok ditemokake, lan nduweni cara sing cocok, Tomcat nggawe obyek saka servlet iki, mbukak ing thread anyar ( thread ), sing ngidini servlet bisa digunakake ing thread kapisah, lan Tomcat terus bisa luwih. ing dhewe, nampa lan ngirim panjalukan. Kajaba iku, Tomcat nggawe rong obyek liyane: siji saka jinis HttpServletRequest (aku bakal nyebataken panjalukan ing mangsa ngarep), lan nomer loro saka jinis HttpServletResponse(Aku bakal nelpon jawaban). Ing obyek pisanan, kabeh data sing ditampa ing panjalukan saka klien, supaya kabeh data bisa ditarik metu saka obyek iki. Inggih, sawise kabeh iki, iku liwat loro obyek iki kanggo cara cocok saka servlet sing mlaku ing thread kapisah. Sanalika servlet rampung kerjane lan duwe respon siap dikirim menyang klien, ngunggahake gendera menyang Tomcat, ujar, "Aku wis rampung, kabeh wis siyap." Tomcat nampa respon lan dikirim menyang klien. Iki ngidini Tomcat nampa panjalukan lan ngirim respon tanpa gangguan, nalika kabeh karya rampung dening servlets mlaku ing Utas kapisah. Mulane, nalika nulis kode servlet, kita nemtokake karya sing bakal ditindakake. Lan ya, sampeyan bisa mikir cara utama () minangka ing Tomcat dhewe (ya, iku ditulis ing Jawa), lan nalika kita "miwiti" Tomcat, ing main().

We nyekel cara GET karo servlets lan ngirim respon prasaja

Saiki, servlet kita ora duwe metode sing cocog (GET), mula Tomcat ngasilake kesalahan 405. Ayo gawe! Kelas HttpServlet , saka ngendi kita entuk warisan servlets, nemtokake cara sing beda-beda. Kanggo nyetel sawetara kode kanggo metode, kita mung ngganti. Ing kasus iki, kita kudu ngilangi cara doGet () ing loro servlet.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
Nalika sampeyan bisa ndeleng, cara iki nampa rong obyek: req (request) lan resp (respon). Iki minangka obyek sing bakal digawe lan diisi Tomcat kanggo kita nalika nelpon cara sing cocog ing servlet iki. Pisanan, ayo nindakake jawaban sing paling gampang. Kanggo nindakake iki, njupuk obyek resp lan njaluk saka obyek PrintWriter , kang bisa digunakake kanggo nulis respon. Inggih, nggunakake kita bakal print sawetara string prasaja.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("Method GET from AddServlet");
}
Kita bakal nindakake sing padha ing ListServlet servlet , sawise iku kita bakal miwiti server maneh. Nalika sampeyan bisa ndeleng, kabeh bisa! Nalika sampeyan ngeklik tombol, kaca mbukak kanthi teks sing "direkam" karo PrintWriter . Mung yen jsp sing disiapake kanggo ngasilake kaca kanthi jawaban ora digunakake kanthi cara apa wae. Iki amarga eksekusi mung ora tekan wong-wong mau. Serverlet dhewe saiki ngasilake respon lan ngrampungake pakaryane, menehi tandha Tomcat yen wis siap respon kanggo klien. Tomcat mung njupuk respon iki lan dikirim maneh menyang klien. Kita nransfer kontrol saka servlets menyang jsp. Ayo ngganti kode metode kita kanthi cara iki:
  • kita njaluk saka obyek request obyek request manager, ngendi kita pass alamat jsp saka kaca sing arep kita transfer kontrol;
  • nggunakake obyek sing ditampa, kita nransfer kontrol menyang kaca jsp sing ditemtokake , lan aja lali masang panjaluk lan respon obyek sing ditampa saka Tomcat.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
Ing awak kaca jsp (ing tag awak) kita bisa nulis soko supaya kita bisa ndeleng kanthi jelas kaca endi sing ditampilake. Sawise iku, kita miwiti maneh server lan mriksa. Tombol ing kaca utama dipencet, kaca dibukak, tegese panjaluk dikirim menyang servlets, sawise kontrol ditransfer menyang kaca jsp, sing wis digawe. Mekaten. Ing bagean sabanjure artikel kita bakal menehi hasil karo fungsi aplikasi kita.

Apa maneh sing kudu diwaca:

Nggawe proyek web prasaja ing IntelliJ Idea Enterprise. Langkah demi langkah, kanthi gambar


Obrolanku
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION