JavaRush /Blog Jawa /Random-JV /Nggawe aplikasi web prasaja nggunakake servlets lan jsp (...
fatfaggy
tingkat
Киев

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

Diterbitake ing grup
Aku terus njlèntrèhaké proses nggawe aplikasi web nggunakake servlets, jsp, Maven lan Tomcat. Wiwitan artikel , yen perlu.
Kita nggawe entitas.
Ayo nggawe kelas Panganggo ing paket entitas, sing bakal nggawe rong variabel string pribadi lan sandhi. Ayo nggawe konstruktor (standar lan siji sing bakal nampa loro nilai), getter / setter, override toString () cara mung ing kasus, uga padha () lan hashCode () cara. public class User { private String name; private String password; public User() { } public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (name != null ? !name.equals(user.name) : user.name != null) return false; return password != null ? password.equals(user.password) : user.password == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (password != null ? password.hashCode() : 0); return result; } } Saiki kita bisa miwiti nggawe dhaptar pangguna, ing ngendi kita bakal nambah pangguna, lan saka ngendi kita bakal nampilake. Nanging ana masalah. Kita ora nggawe obyek servlet kita; Tomcat nggawe kanggo kita. Cara sing kita timpa uga wis ditetepake kanggo kita lan kita ora bisa nambah parameter. Kepiye carane bisa nggawe dhaptar umum sing bakal katon ing loro servlet kita? Yen kita mung nggawe obyek dhaptar dhewe ing saben servlet, bakal katon manawa kita bakal nambah pangguna menyang siji dhaptar, nanging nampilake dhaptar pangguna nggunakake servlet ListServlet bakal beda banget. Pranyata metu sing kita kudu obyek sing bakal umum kanggo loro servlets. Umumé, kita butuh obyek sing umum kanggo kabeh kelas ing program kita; obyek mung kanggo kabeh program. Muga-muga sampeyan wis krungu babagan pola desain. Lan mbok menawa kanggo sawetara iki perlu nyata pisanan nggunakake Cithakan Singleton ing program sing. Sampeyan bisa kreatif lan nggawe singleton sing apik, kanthi mriksa lan sinkronisasi kaping pindho (ya, kita duwe aplikasi multi-threaded, amarga Tomcat mbukak servlets ing macem-macem benang), nanging aku bakal nggunakake opsi kasebut kanthi initialization awal, amarga ing kasus iki cukup cocok.
Nggawe model.
Banjur kita bakal nggawe kelas (lan ngleksanakake cithakan singleton ing) ing paket model, lan kita uga bakal nyebataken Model cukup colorfully. Ayo nggawe obyek dhaptar pangguna pribadi ing njero, lan nggawe rong cara: siji supaya sampeyan bisa nambah pangguna, lan liya - ayo bali dhaptar strings (jeneng pangguna). Amarga obyek pangguna kita kalebu jeneng lan sandhi, kita ora pengin "mbukak" sandhi pangguna, mula kita mung bakal ngasilake dhaptar jenenge. public class Model { private static Model instance = new Model(); private List model; public static Model getInstance() { return instance; } private Model() { model = new ArrayList<>(); } public void add(User user) { model.add(user); } public List list() { return model.stream() .map(User::getName) .collect(Collectors.toList()); } }
A sethitik babagan mvc.
Awit sampeyan wis krungu bab singleton, iku tegese sampeyan mbokmenawa wis krungu bab pola desain liyane - MVC (model-view-controller, utawa ing Rusia model-view-controller, utawa kaya ing Inggris model-view-controller). Intine yaiku misahake logika bisnis saka presentasi. Yaiku, misahake kode sing nemtokake apa sing kudu ditindakake saka kode sing nemtokake cara nampilake . Tampilan (view utawa mung views) tanggung jawab kanggo wangun kang sawetara data presented. Ing kasus kita, tampilan minangka kaca JSP kita. Mulane aku sijine ing folder disebut views. Model minangka data nyata sing digunakake program kasebut. Ing kasus kita, iki minangka pangguna (dhaptar pangguna). Inggih, pengontrol minangka penghubung ing antarane. Padha njupuk data saka model lan nransfer menyang views, utawa padha nampa sawetara data saka Tomcat, proses lan nransfer menyang model. Logika bisnis (yaiku, apa sing kudu dilakoni ) kudu diterangake ing wong-wong mau, lan ora ing model utawa ing tampilan. Dadi, saben wong nindakake pakaryane dhewe:
  • model nyimpen data
  • Tampilan nggambarake perwakilan data sing apik
  • pengontrol ngolah data
Iki ngidini kabeh dadi cukup prasaja lan maintainable. Lan ora mbucal monstrous kabeh kode ing siji kelas. MVC ora mung cocok kanggo program web, nanging isih umum banget (yen ora tansah) ing wilayah iki. Ing kasus kita, servlet bakal dadi pengontrol. Ya, iki minangka gambaran banget lan malah kasar babagan pola iki, nanging artikel iki ora babagan pola desain, nanging babagan carane nggawe aplikasi web sing prasaja :) Sing pengin ngerti luwih akeh - Google ngerti kabeh ! :) Ayo bali menyang tampilan kita.
Nggawe formulir kanggo nambah pangguna.
Ayo dadi nambah wangun kanggo file add.jsp, dumadi saka rong input teks (siji biasa, liyane jinis sandi) lan tombol kanggo ngirim data menyang server. Ing kene formulir kasebut nduweni atribut metode kanthi kiriman nilai. Iki tegese data saka formulir iki bakal dikirim menyang server ing wangun request POST. Atribut tumindak ora ditemtokake, tegese panyuwunan iki bakal menyang alamat sing padha ing ngendi kita menyang kaca iki (/add). Mangkono, servlet kita, sing kaiket ing alamat iki, nalika nampa panjalukan GET, ngasilake jsp iki kanthi formulir kanggo nambah pangguna, lan yen nampa panjalukan POST, banjur formulir iki wis ngirim data ing kana (sing bakal dijupuk saka obyek request ing doPost () cara, proses lan transfer menyang model kanggo nyimpen). Wigati dicathet yen input duwe parameter jeneng ing kene (kanggo kolom kanthi jeneng nduweni jeneng nilai, lan kanggo kolom kanthi sandhi nduweni nilai pass). Iki minangka titik sing penting banget. Amarga kanggo entuk data iki (jeneng lan sandhi sing bakal dilebokake) saka panyuwunan (wis ana ing servlet), kita bakal nggunakake jeneng lan pass kasebut. Nanging luwih ing mengko. Tombol kanggo ngirim data dhewe maneh digawe ing wangun tombol, lan ora input, minangka biasane adat. Aku ora ngerti carane universal pilihan iki, nanging bisa kanggo kula ing Chrome :)
Ngolah panjalukan POST nganggo servlet.
Ayo bali menyang servlet AddServlet. Kita wis ngerti manawa servlet bisa "nyekel" panjaluk GET, kita wis ngilangi metode doGet () saka kelas HttpServlet. Kanggo mulang servlet kita uga nyekel panjalukan POST, kita uga override doPost () cara. Nampa panjalukan lan obyek respon sing padha saka Tomcat, sing bakal ditindakake. Pisanan, ayo ekstrak saka panyuwunan jeneng lan pass paramèter sing dikirim formulir (yen sampeyan menehi jeneng kanthi beda ing formulir kasebut, mula jenenge sing sampeyan tulis). Banjur kita bakal nggawe obyek pangguna nggunakake data sing ditampa. Banjur kita bakal entuk obyek model lan nambah pangguna sing digawe menyang model kasebut. @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("pass"); User user = new User(name, password); Model model = Model.getInstance(); model.add(user); }
Transfer data menyang tampilan.
Saiki ayo pindhah menyang servlet ListServlet. Kita wis dipun ginakaken cara doGet (), kang mung transfer kontrol kanggo tampilan list.jsp. Yen sampeyan durung duwe iki, nindakaken kanthi analogi karo cara sing padha saka servlet AddServlet. Saiki bakal luwih apik kanggo njaluk dhaptar jeneng panganggo saka model lan pass menyang tampilan, sing bakal nampa wong-wong mau ing kono lan nampilake kanthi apik. Kanggo nindakake iki, kita bakal nggunakake maneh obyek panjalukan sing ditampa saka Tomcat. Kita bisa nambah atribut menyang obyek iki, menehi sawetara jeneng lan, nyatane, obyek kasebut dhewe sing pengin ditransfer menyang tampilan. Amarga kasunyatan manawa nalika nransfer proses eksekusi saka servlet menyang tampilan, kita ngliwati panjalukan lan obyek respon sing padha sing ditampa dening servlet kasebut, banjur kanthi nambahake dhaptar jeneng menyang obyek panyuwunan, banjur bisa saka panyuwunan iki. obyek ing tampilan nggawe dhaptar jeneng pangguna lan entuk. Kita wis rampung karo kelas ListServlet, dadi iki kode kanggo kabeh kelas. package app.servlets; import app.model.Model; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class ListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Model model = Model.getInstance(); List names = model.list(); req.setAttribute("userNames", names); RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/list.jsp"); requestDispatcher.forward(req, resp); } }
Ngeksekusi kode java ing file jsp.
Saiki ayo pindhah menyang file list.jsp. Berkas iki mung bakal dieksekusi nalika ListServlet ngliwati proses eksekusi ing kene. Kajaba iku, ing servlet kasebut, kita wis nyiapake dhaptar jeneng pangguna saka model kasebut lan mlebu ing obyek panyuwunan. Diwenehi dhaftar jeneng, kita bisa mbukak kanggo daur ulang liwat lan print saben jeneng. Kaya sing wis dakkandhakake, file jsp bisa nglakokake kode java (ing prinsip, iki sing nggawe beda karo kaca html statis). Kanggo nindakake sawetara kode, cukup kanggo nyelehake konstruksi ing papan sing kita butuhake. <% // java code %> Ing konstruksi kasebut, kita entuk akses menyang sawetara variabel: panjaluk - obyek panyuwunan, sing dilewati saka servlet, ing ngendi mung diarani. nanggepi req - obyek respon, ing Servlet diarani resp metu - obyek saka jinis JspWriter (diwarisake saka Writer biasanipun), karo bantuan kang kita bisa "nulis" soko langsung menyang kaca html dhewe. Out.println("Hello world!") meh padha karo System.out.println("Hello world!"), Nanging aja bingung! out.println () "nulis" kanggo kaca html, lan System.out.println - kanggo output sistem. Yen sampeyan nelpon System.out.println () cara nang bagean karo kode jsp, sampeyan bakal weruh asil ing console Tomcat, lan ora ing kaca, sing bisa uga pengin :) Sampeyan bisa katon kanggo obyek liyane kasedhiya nang jsp kene . Nggunakake obyek panyuwunan, kita bisa entuk dhaptar jeneng sing diwarisake saka servlet (kita masang atribut sing cocog karo obyek iki), lan nggunakake obyek metu kita bisa nampilake jeneng kasebut. Saiki ayo kita lakoni mung ing wangun dhaptar html: Yen kita pengin nampilake dhaptar mung nalika ana pangguna, lan yen ora, nampilake bebaya yen durung ana pangguna, kita bisa nulis maneh bagean iki sethithik: Saiki kita ngerti carane nransfer data saka servlets kanggo views - kita bisa nambah AddServlet sethitik supaya kabar ditampilake babagan sukses nambah pangguna. Kanggo nindakake iki, ing doPost () cara, sawise nambah pangguna anyar kanggo model, kita bisa nambah jeneng pangguna iki kanggo kawicaksanan obyek req lan pass kontrol bali menyang tampilan add.jsp. Lan ing kono wis nggawe bagean karo kode Jawa, ing ngendi sampeyan bisa mriksa apa atribut kasebut ana ing panyuwunan, lan yen mangkono, banjur nampilake pesen yen pangguna wis kasil ditambahake. Sawise owah-owahan kasebut, kode lengkap AddServlet servlet bakal katon kaya iki: Ing pungkasan metode doPost (), kita nyetel atribut kanthi jeneng pangguna sing ditambahake ing model kasebut, banjur nelpon doGet (). ) cara, sing kita pass panjalukan lan respon saiki. Lan doGet () cara wis nransfer kontrol kanggo tampilan, ngendi iku ngirim obyek request karo jeneng pangguna ditambahaké ditempelake minangka atribut. Iku tetep kanggo mbenerake add.jsp dhewe supaya nampilake kabar kasebut yen ana atribut kasebut. pungkasan add.jsp
    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { for (String s : names) { out.println("
  • " + s + "
  • "); } } %>
<% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println(" "); for (String s : names) { out.println("
  • " + s + "
  • "); } out.println("
    "); } else out.println("

    There are no users yet!

    "); %>
    package app.servlets; import app.entities.User; import app.model.Model; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class AddServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp"); requestDispatcher.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("pass"); User user = new User(name, password); Model model = Model.getInstance(); model.add(user); req.setAttribute("userName", name); doGet(req, resp); } } <%@ page contentType="text/html;charset=UTF-8" language="java" %> Add new user

    Super app!

    <% if (request.getAttribute("userName") != null) { out.println("

    User '" + request.getAttribute("userName") + "' added!

    "); } %>

    Add user

    Isi kaca kasebut dumadi saka div kanthi header, banjur div wadhah kanggo isi, mriksa apa atribut karo jeneng panganggo ana ing, banjur div karo formulir kanggo nambah pangguna, lan ing pungkasan footer karo a tombol kanggo bali menyang kaca utama. Koyone kaya akeh banget div, nanging kita bakal nggunakake mengko yen kita nambah gaya :) Inggih, versi final punika list.jsp Dadi , kita duwe aplikasi web sing bisa nyimpen lan nambah pangguna, uga minangka nampilake dhaptar jenenge. Kabeh sing isih ana yaiku kanggo nghias ... :) <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> Users

    Super app!

    Users

    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println(" "); for (String s : names) { out.println("
  • " + s + "
  • "); } out.println("
    "); } else out.println("

    There are no users yet!

    "); %>
    Nambah gaya. Kita nggunakake framework W3.CSS.
    Ing wayahe, aplikasi kita bisa digunakake, nanging pancen edan :) Kita kudu nambah latar mburi, warna kanggo teks lan tombol, stylize dhaptar, nggawe alignment, nambah indents, umume akeh perkara. Yen sampeyan nulis gaya kanthi manual, bisa njupuk akeh wektu lan saraf. Mulane, aku suggest nggunakake framework CSS W3.CSS . Wis duwe kelas sing wis siap karo gaya; sing isih ana yaiku nyelehake kelas CSS ing papan sing tepat sing pengin ditrapake ing papan kasebut. Kanggo nambah menyang kaca kita, pisanan kita kudu nyakup file karo gaya. Iki bisa ditindakake kanthi rong cara: 1. bukak kaca kita lan ing bagean sirah lebokake link langsung menyang file kanthi gaya. Opsi iki cocog yen sampeyan duwe sambungan Internet sing tetep. Banjur, nalika sampeyan mbukak kaca ing server lokal, gaya bakal ditarik saka Internet. 2. Yen sampeyan pengin duwe kabeh gaya lokal lan ora gumantung ing sambungan Internet, sampeyan mung bisa ngundhuh file karo gaya lan sijine nang endi wae nang folder web (contone web/styles/w3.css), banjur bukak kabeh kaca kita (index.html, add.jsp, list.jsp) lan ketik link menyang file iki kanthi gaya ing bagean sirah. Sawise iku, bukak tag lan tag nganggo gaya sing disenengi . Aku ora bakal manggon ing rinci, nanging bakal langsung menehi versi siap-digawe saka telung file karo kelas gaya diatur. index.html add.jsp list.jsp Iku kabeh :) Yen sampeyan isih duwe pitakonan utawa duwe komentar, utawa ing nalisir, soko ora bisa metu - ninggalake komentar. Inggih, aku bakal masang sawetara gambar saka apa sing metu saka kabeh. Lan pungkasane. Yen sampeyan pengin latihan karo proyek iki, sampeyan bisa nyoba: Super app!

    Super app!

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> Add new user

    Super app!

    <% if (request.getAttribute("userName") != null) { out.println("
    \n" + " ×\n" + "
    User '" + request.getAttribute("userName") + "' added!
    \n" + "
    "); } %>

    Add user

    <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> Users list

    Super app!

    Users

    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println("
      "); for (String s : names) { out.println("
    • " + s + "
    • "); } out.println("
    "); } else out.println("
    \n" + " ×\n" + "
    There are no users yet!
    \n" + "
    "); %>
    Kaca ngarep aplikasi Tambah jendhela pangguna dhaptar pangguna
    • nggawe servlet lan jsp kanggo mbusak pangguna lan saperangan liyane kanggo ngganti / ngowahi pangguna sing wis ana. Sampeyan bakal entuk aplikasi web CrUD nyata :) ing servlets))
    • ngganti dhaptar (List ) kanggo nggarap database supaya pangguna sing ditambahake ora ilang sawise server diwiwiti maneh :)
    Sugeng enjang!
    Komentar
    TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
    GO TO FULL VERSION