JavaRush /Java Blogu /Random-AZ /Servletlərdən və jsp-dən istifadə edərək sadə veb tətbiqi...
Стас Пасинков
Səviyyə
Киев

Servletlərdən və jsp-dən istifadə edərək sadə veb tətbiqinin yaradılması (2-ci hissə)

Qrupda dərc edilmişdir
Servletlərdən və jsp-dən istifadə edərək sadə veb proqramın yaradılması (1-ci hissə) Məqaləni başa düşmək üçün tələb olunan bilik səviyyəsi: siz artıq Java Core-u az-çox başa düşmüsünüz və JavaEE texnologiyalarına və veb proqramlaşdırmaya baxmaq istərdiniz. Əgər siz hazırda məqaləyə yaxın mövzuları əhatə edən Java Collections axtarışını öyrənirsinizsə, bu, ən məntiqlidir.
Servletlər və jsp-dən istifadə edərək sadə veb tətbiqinin yaradılması (2-ci hissə) - 1

Müəssisələrin yaradılması

Müəssisələr paketində biz İstifadəçi sinfi yaradacağıq və orada iki özəl simli dəyişən adparol olacaq . Gəlin konstruktorlar yaradaq (standart və hər iki dəyəri qəbul edən), alıcılar/ayarlayıcılar, hər ehtimala qarşı toString() metodunu , həmçinin equals()hashCode() metodlarını ləğv edək . Yəni, sinif yaradanda layiqli Java tərtibatçısının etdiyi hər şeyi edəcəyik.
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;
    }
}
İndi istifadəçilərin siyahısını yaratmağa başlaya bilərik. Biz ona istifadəçilər əlavə edəcəyik və onları haradan nümayiş etdirəcəyik. Bununla belə, bir problem var. Biz servlet obyektlərimizi yaratmırıq, Tomcat bunu bizim üçün edir . Onlarda ləğv etdiyimiz üsullar da bizim üçün artıq müəyyən edilib və biz parametr əlavə edə bilmirik. O zaman biz hər iki servletimizə görünən paylaşılan siyahı necə yarada bilərik? Hər bir servletdə sadəcə öz siyahı obyektimizi yaratsaq, məlum olacaq ki, biz istifadəçiləri bir siyahıya əlavə edəcəyik və ListServlet servletindən istifadə edən istifadəçilərin siyahısını digərinə göstərəcəyik. Belə çıxır ki, bizə hər iki servlet üçün ümumi olan obyekt lazımdır. Ümumiyyətlə, bizə proqramımızda bütün siniflər üçün ümumi olan obyekt lazımdır; bütün proqram üçün yeganə obyekt. Ümid edirəm dizayn nümunələri haqqında bir şey eşitmisiniz. Və, bəlkə də, bəziləri üçün bu, proqramında Singleton modelindən istifadə etmək üçün ilk real ehtiyacdır . Siz təhrif oluna və ikiqat yoxlamalar və sinxronizasiya ilə sərin Singleton yarada bilərsiniz (bəli, bizdə çox yivli proqram var, çünki Tomcat müxtəlif mövzularda servletlər işlədir), lakin burada olduqca uyğun olduğu üçün erkən başlatma ilə seçimdən istifadə edəcəyəm. kifayətdir və bu bizim məqsədlərimizə uyğundur.

Modelin yaradılması

Model paketində bir sinif yaradaq (və Singleton nümunəsini tətbiq edək ) və onu qeyri-adi bir şey adlandıraq. Model deyək . Sinifimizdə şəxsi istifadəçi siyahısı obyekti yaradaq və iki metodu həyata keçirək: biri istifadəçi əlavə etmək üçün, ikincisi isə sətirlərin (istifadəçi adları) siyahısını qaytarmaq üçün. İstifadəçi obyektimiz ad və paroldan ibarət olduğundan və biz istifadəçi parollarını “aşkar etmək” istəmədiyimiz üçün bizdə yalnız adların siyahısı olacaq.
public class Model {
    private static Model instance = new Model();

    private List<User> model;

    public static Model getInstance() {
        return instance;
    }

    private Model() {
        model = new ArrayList<>();
    }

    public void add(User user) {
        model.add(user);
    }

    public List<String> list() {
        return model.stream()
                .map(User::getName)
                .collect(Collectors.toList());
    }
}

mvc haqqında bir az

Singleton haqqında eşitdiyiniz üçün , yəqin ki, başqa bir dizayn nümunəsi haqqında eşitmisiniz - MVC (model-görüntü-nəzarətçi, rus dilində model-görüntü-nəzarətçi və ya ingilis dilində model-görüntü-nəzarətçi). Onun mahiyyəti biznes məntiqini təqdimatdan ayırmaqdır. Yəni, necə göstəriləcəyini təyin edən koddan nə edəcəyini təyin edən kodu ayırın. Görünüş (görünüş və ya sadəcə görünüşlər) bəzi məlumatların təqdim olunduğu forma üçün cavabdehdir. Bizim vəziyyətimizdə baxışlar JSP səhifələrimizdir. Buna görə də onları views adlı qovluğa qoyuram . Model proqramın işlədiyi faktiki məlumatdır. Bizim vəziyyətimizdə bunlar istifadəçilərdir (istifadəçilərin siyahısı). Yaxşı, nəzarətçilər onlar arasında birləşdirici əlaqədir. Onlar modeldən məlumatları götürür və baxışlara ötürür (yaxud Tomcat-dan bəzi məlumatları alır, emal edir və modelə ötürür). Biznes məntiqi (proqram tam olaraq nə etməlidir) modeldə və ya görünüşdə deyil, onlarda təsvir edilməlidir. Beləliklə, hər kəs öz işini görür:
  • model məlumatları saxlayır;
  • görünüşlər məlumatların gözəl təsvirini çəkir;
  • nəzarətçilər məlumatların emalı ilə məşğul olurlar.
Bu, bir sinifdəki bütün kodun dəhşətli bir zibilindən daha çox, proqramın kifayət qədər sadə və davamlı olmasına imkan verir. MVC yalnız veb proqramlaşdırma üçün uyğun deyil, lakin bu sahədə xüsusilə tez-tez rast gəlinir (demək olar ki, həmişə). Bizim vəziyyətimizdə servletlər nəzarətçi kimi çıxış edəcəklər. Bu, nümunənin çox səthi və qısa təsviridir, lakin MVC bu məqalənin əsas mövzusu deyil. Kim daha çox bilmək istəyir - Google köməyə! İstifadəçi əlavə etmək üçün forma yaradın Add.jsp faylına iki mətn daxiletmə sahəsindən (biri adi, digəri parol) və serverə verilənlərin göndərilməsi üçün düymədən ibarət formanı əlavə edək.
<form method="post">
    <label>Name:
        <input type="text" name="name"><br />
    </label>

    <label>Password:
        <input type="password" name="pass"><br />
    </label>
    <button type="submit">Submit</button>
</form>
Burada formada dəyər postu ilə metod atributu var . Bu o deməkdir ki, bu formadan verilənlər POST sorğusu şəklində serverə göndəriləcək. Fəaliyyət atributu göstərilməyib, yəni sorğu bizim bu səhifəyə getdiyimiz ünvana göndəriləcək ( /əlavə ). Beləliklə, bu ünvana bağlı olan servletimiz GET sorğusu aldıqdan sonra bu jsp-ni istifadəçilərin əlavə edilməsi forması ilə qaytarır və əgər o, POST sorğusunu alırsa, bu o deməkdir ki, forma öz məlumatlarını oraya göndərib (biz onu buradan çıxaracağıq ) doPost() Qeyd etmək lazımdır ki, giriş sahələrində ad parametri var (adı olan sahə üçün dəyər adı, parolu olan sahə üçün isə keçid dəyəri var ). Bu olduqca vacib bir məqamdır. Bu məlumatları (daxil ediləcək ad və parol) sorğudan (artıq servletin içərisində) əldə etmək üçün biz məhz bu addan istifadə edəcəyik və keçəcəyik . Ancaq bu barədə daha sonra. Məlumatların göndərilməsi üçün düymənin özü adətən adət olduğu kimi çıxış sahəsi kimi deyil, yenidən düymə şəklində hazırlanır . Bu seçimin nə qədər universal olduğunu bilmirəm, amma mənim üçün işləyir (Chrome brauzeri).

Servlet ilə POST sorğusunun işlənməsi

AddServlet servletinə qayıdaq . Xatırladım: servletimizin GET sorğularını “tuta bilməsi” üçün biz HttpServlet sinfindən doGet() metodunu ləğv etdik . Servletimizə POST sorğularını da tutmağı öyrətmək üçün biz həmçinin doPost() metodunu ləğv etməliyik . O , işləyəcəyimiz Tomcat- dan oxşar sorğu və cavab obyektlərini alır . Əvvəlcə sorğudan adı çıxaraq və formanın göndərdiyi parametrləri keçirək (əgər onları formada fərqli adlandırmısınızsa, o zaman sizin yazdığınız adlar bunlardır). Bundan sonra alınan məlumatlardan istifadə edərək istifadəçi obyektimizi yaradacağıq. Sonra model obyektini alacağıq və yaradılmış istifadəçini modelə əlavə edəcəyik.
@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);
}

Baxmaq üçün data ötürülür

ListServlet servletinə keçək . Burada doGet() metodu artıq tətbiq edilib və bu, sadəcə olaraq idarəetməni list.jsp görünüşünə köçürür . Əgər sizdə bu hələ yoxdursa, AddServlet servletindən eyni üsulla bənzətmə ilə bunu edin . İndi modeldən istifadəçi adlarının siyahısını almaq və onları qəbul edəcək və gözəl şəkildə göstərəcək görünüşə ötürmək yaxşı olardı. Bunun üçün Tomcat- dan aldığımız sorğu obyektindən yenidən istifadə edəcəyik . Bu obyektə bir atribut əlavə edə bilərik, ona bəzi adlar və əslində, keçirmək üçün köçürmək istədiyimiz obyektin özü . İcra prosesini servletdən görünüşə köçürərkən biz servletin özünün qəbul etdiyi eyni sorğu və cavab obyektlərini ora ötürməyimizə görə, sonra sorğu obyektinə adlar siyahısımızı əlavə etməklə biz bu sorğudan istifadə edə bilərik. görünüşündəki obyekt istifadəçi adlarımızın siyahısını yaradın və əldə edin. ListServlet sinfi ilə işimiz bitdi , ona görə də bütün sinif üçün kod budur:
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<String> names = model.list();
        req.setAttribute("userNames", names);

        RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/list.jsp");
        requestDispatcher.forward(req, resp);
    }
}

jsp fayllarında java kodunun icrası

list.jsp faylı üzərində işə başlamağın vaxtıdır . O, yalnız ListServlet icra prosesini burada keçirdikdə yerinə yetiriləcək . Bundan əlavə, həmin servletdə biz artıq modeldən istifadəçi adlarının siyahısını hazırlamışıq və onu sorğu obyektində bura keçirmişik. Bizdə adların siyahısı olduğundan, biz onu dövrə vurub hər bir adı çap edə bilərik. Artıq dediyim kimi, jsp faylları java kodunu icra edə bilir (bu onları statik html səhifələrindən fərqləndirir). Bəzi kodu yerinə yetirmək üçün bizə lazım olan yerə aşağıdakı konstruksiyanı qoymaq kifayətdir:
<!-- html code -->
<%
    // java code
%>
<!-- html code -->
Bu konstruksiya daxilində bir neçə dəyişənə çıxışımız var:
  • sorğu servletdən keçdiyimiz sorğu obyektimizdir, burada sadəcə req adlanırdı ;
  • servletdə resp adlanan cavab - cavab obyekti ;
  • out JspWriter tipli bir obyektdir (adi Yazıçıdan miras qalmışdır ) , onun köməyi ilə biz birbaşa html səhifəsinin özünə nəyisə “yazmaq” olar. out.println("Salam dünya!") girişi System.out.println("Salam dünya!") girişinə çox bənzəyir , lakin ikisini qarışdırmayın!
    out.println() html səhifəsinə “yazır”, System.out.println isə sistemin çıxışına yazır. Java kodu ilə bölmənin daxilində jsp metoduna System.out.println() zəng etsəniz, nəticələri səhifədə deyil, Tomcat konsolunda görəcəksiniz .

Siz jsp daxilində digər mövcud obyektləri burada axtara bilərsiniz . Sorğu obyektindən istifadə edərək servletdən ötürülən adların siyahısını əldə edə bilərik (biz bu obyektə müvafiq atribut əlavə etdik), out obyektindən istifadə edərək bu adları göstərə bilərik. Gəlin bunu edək (hələlik sadəcə html siyahısı şəklində):
<ul>
    <%
        List<String> names = (List<String>) request.getAttribute("userNames");

        if (names != null && !names.isEmpty()) {
            for (String s : names) {
                out.println("<li>" + s + "</li>");
            }
        }
    %>
</ul>
Siyahını yalnız istifadəçilər olduqda göstərmək və əks halda hələ heç bir istifadəçi olmadığı barədə xəbərdarlıq göstərmək lazımdırsa, bu bölməni bir az yenidən yaza bilərik:
<%
    List<String> names = (List<String>) request.getAttribute("userNames");

    if (names != null && !names.isEmpty()) {
        out.println("<ui>");
        for (String s : names) {
            out.println("<li>" + s + "</li>");
        }
        out.println("</ui>");
    } else out.println("<p>There are no users yet!</p>");
%>
İndi məlumatları servletlərdən görünüşlərə ötürə bildiyimiz üçün AddServlet- imizi bir qədər təkmilləşdirə bilərik ki, istifadəçi uğurla əlavə edildikdə bildiriş göstərilsin. Bunun üçün doPost() metodunda modelə yeni istifadəçi əlavə etdikdən sonra biz bu istifadəçinin adını req obyektinin atributlarına əlavə edə və nəzarəti yenidən add.jsp görünüşünə ötürə bilərik . Və orada artıq Java kodu ilə bir bölmə yaradın ki, orada belə bir atributun sorğuda olub olmadığını yoxlayın və əgər varsa, istifadəçinin uğurla əlavə edildiyini bildirən bir mesaj çıxarın. Bu dəyişikliklərdən sonra tam AddServlet servlet kodu belə görünəcək:
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);
    }
}
Burada, doPost() metodunun sonunda , modelə əlavə edilmiş istifadəçi adı ilə bir atribut təyin etdik, bundan sonra biz cari sorğu və cavabı ötürən doGet() metodunu çağırırıq. doGet() metodu artıq nəzarəti görünüşə ötürür, burada o, atribut kimi əlavə edilmiş istifadəçinin adı ilə sorğu obyekti göndərir. Qalan yalnız add.jsp-ni düzəltməkdir ki, belə bir atribut varsa, belə bir bildiriş göstərsin. Son add.jsp budur :
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Add new user</title>
    </head>

    <body>
        <div>
            <h1>Super app!</h1>
        </div>

        <div>
            <%
                if (request.getAttribute("userName") != null) {
                    out.println("<p>User '" + request.getAttribute("userName") + "' added!</p>");
                }
            %>
            <div>
                <div>
                    <h2>Add user</h2>
                </div>

                <form method="post">
                    <label>Name:
                        <input type="text" name="name"><br />
                    </label>
                    <label>Password:
                        <input type="password" name="pass"><br />
                    </label>
                    <button type="submit">Submit</button>
                </form>
            </div>
        </div>

        <div>
            <button onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
Səhifənin əsas hissəsi aşağıdakılardan ibarətdir:
  • div-a başlığı ilə;
  • məzmun üçün div konteyneri, istifadəçi adı ilə atributun mövcud olub olmadığını yoxlayır;
  • istifadəçilər əlavə etmək üçün forma ilə div;
  • və sonunda əsas səhifəyə qayıtmaq üçün düyməsi olan altbilgi var.
Çox div var kimi görünə bilər, lakin biz üslub əlavə etdikdə onlardan sonra istifadə edəcəyik. Son list.jsp belədir:
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Users</title>
    </head>

    <body>
        <div>
            <h1>Super app!</h1>
        </div>

        <div>
            <div>
                <div>
                    <h2>Users</h2>
                </div>
                <%
                    List<String> names = (List<String>) request.getAttribute("userNames");

                    if (names != null && !names.isEmpty()) {
                        out.println("<ui>");
                        for (String s : names) {
                            out.println("<li>" + s + "</li>");
                        }
                        out.println("</ui>");
                    } else out.println("<p>There are no users yet!</p>");
                %>
            </div>
        </div>

        <div>
            <button onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
Beləliklə, istifadəçiləri saxlaya və əlavə edə, həmçinin onların adlarının siyahısını göstərə bilən tam işləyən veb proqramımız var. Yalnız onu bəzəmək qalır... :)

Üslubların əlavə edilməsi. Biz W3.CSS çərçivəsindən istifadə edirik

Hazırda tətbiqimiz işləyir, lakin tamamilə dəli. Buna görə də, biz fon, mətn və düymələrin rəngi, üslub siyahıları əlavə edəcəyik, hizalama edəcəyik, abzaslar əlavə edəcəyik və s. Üslubları əl ilə yazsanız, bu, çox vaxt və əsəb apara bilər. Buna görə də mən W3.CSS CSS çərçivəsini istifadə etməyi təklif edirəm. Artıq üslubları olan hazır dərsləri var; yalnız tətbiq etmək istədiyimiz CSS dərslərini lazımi yerlərdə yerləşdirmək qalır. Onları səhifələrimizə əlavə etmək üçün əvvəlcə üslubları olan bir fayl daxil edəcəyik. Bu iki yolla edilə bilər:
  1. səhifələrimizdən keçin və başlıq bölməsinə üslubları olan fayla birbaşa keçid daxil edin

    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">

    Daimi İnternet bağlantınız varsa, bu seçim uyğun gəlir. Sonra, yerli serverdə səhifələrinizi açdığınız zaman üslublar İnternetdən çıxarılacaq.


  2. Bütün üslublara yerli olaraq sahib olmaq və İnternet bağlantısından asılı olmamaq istəyirsinizsə, üslubları olan faylı endirin və onu veb qovluğunda bir yerə yerləşdirin ( məsələn, web/styles/w3.css ), sonra bütün üslublarımızı nəzərdən keçirin. səhifələri ( index.html, add.jsp, list.jsp ) daxil edin və başlıq bölməsində üslublarla bu fayla keçid daxil edin.

    <link rel="stylesheet" href="styles/w3.css">

    Bundan sonra, sadəcə etiketləri keçin və bəyəndiyiniz üslubları əlavə edin. Mən bu barədə ətraflı danışmayacağam, amma dərhal tərtib edilmiş üslub sinifləri ilə üç faylımın hazır versiyalarını verəcəyəm.

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Super app!</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-center">
            <div class="w3-bar w3-padding-large w3-padding-24">
                <button class="w3-btn w3-hover-light-blue w3-round-large" onclick="location.href='/list'">List users</button>
                <button class="w3-btn w3-hover-green w3-round-large" onclick="location.href='/add'">Add user</button>
            </div>
        </div>
    </body>
</html>

add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Add new user</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-padding">
            <%
                if (request.getAttribute("userName") != null) {
                    out.println("<div class=\"w3-panel w3-green w3-display-container w3-card-4 w3-round\">\n" +
                            "   <span onclick=\"this.parentElement.style.display='none'\"\n" +
                            "   class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-green w3-border w3-border-green w3-hover-border-grey\">×</span>\n" +
                            "   <h5>User '" + request.getAttribute("userName") + "' added!</h5>\n" +
                            "</div>");
                }
            %>
            <div class="w3-card-4">
                <div class="w3-container w3-center w3-green">
                    <h2>Add user</h2>
                </div>
                <form method="post" class="w3-selection w3-light-grey w3-padding">
                    <label>Name:
                        <input type="text" name="name" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
                    </label>
                    <label>Password:
                        <input type="password" name="pass" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
                    </label>
                    <button type="submit" class="w3-btn w3-green w3-round-large w3-margin-bottom">Submit</button>
                </form>
            </div>
        </div>

        <div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
            <button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>

list.jsp

<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Users list</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-center w3-margin-bottom w3-padding">
            <div class="w3-card-4">
                <div class="w3-container w3-light-blue">
                    <h2>Users</h2>
                </div>
                <%
                    List<String> names = (List<String>) request.getAttribute("userNames");

                    if (names != null && !names.isEmpty()) {
                        out.println("<ul class=\"w3-ul\">");
                        for (String s : names) {
                            out.println("<li class=\"w3-hover-sand\">" + s + "</li>");
                        }
                        out.println("</ul>");

                    } else out.println("<div class=\"w3-panel w3-red w3-display-container w3-card-4 w3-round\">\n"
+
                            "   <span onclick=\"this.parentElement.style.display='none'\"\n" +
                            "   class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-red w3-border w3-border-red w3-hover-border-grey\">×</span>\n" +
                            "   <h5>There are no users yet!</h5>\n" +
                            "</div>");
                %>
            </div>
        </div>

        <div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
            <button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
Hamısı budur :) Hələ hər hansı bir sualınız varsa və ya şərhiniz varsa və ya əksinə, bir şey alınmırsa - şərh yazın. UPD: düymələri basarkən 404 səhvləri ilə bağlı probleminiz varsa, hər şey düzgün aparılsa da, bəlkə də fikirdəki yerləşdirmə konfiqurasiyasını düzəltməlisiniz. Bunu etmək üçün konfiqurasiyaları redaktə et (başlama düyməsinin yanında yuxarıda), pəncərənin sağ tərəfindəki Yerləşdirmə sekmesine keçməlisiniz və Tətbiq kontekstində sadəcə olaraq göstərildiyinə əmin olun / Yaxşı, mən' Bütün bunlardan çıxanların bir neçə ekran görüntüsünü əlavə edəcəyəm.
Servletlərdən və jsp-dən istifadə edərək sadə veb tətbiqinin yaradılması (2-ci hissə) - 2
Servletlərdən və jsp-dən istifadə edərək sadə veb tətbiqinin yaradılması (2-ci hissə) - 3
Servletlərdən və jsp-dən istifadə edərək sadə veb tətbiqinin yaradılması (2-ci hissə) - 4
Və nəhayət , bu layihə ilə məşq etmək istəyirsinizsə, cəhd edə bilərsiniz:
  • bir istifadəçini silmək üçün bir servlet və jsp, mövcud istifadəçini dəyişdirmək/redaktə etmək üçün isə bir neçə daha yaradın. Servletlərdə əsl CrUD veb tətbiqi əldə edəcəksiniz :));
  • Əlavə edilmiş istifadəçilər serveri yenidən işə saldıqdan sonra yoxa çıxmasın deyə siyahını (Siyahı) verilənlər bazası ilə işləmək ilə əvəz edin :)
Uğurlar!
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION