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

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

Toparda çap edildi
Servlets we jsp ulanyp ýönekeý web programmasyny döretmek (1-nji bölüm) Makala düşünmek üçin zerur bilim derejesi: siz Java Core-ä eýýäm has az düşünýärsiň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.
Servlets we jsp (2-nji bölüm) - 1 ulanyp, ýönekeý web programmasyny döretmek

Kärhanalary döretmek

Edaralar paketinde Ulanyjy synpyny dörederis we onda iki sany şahsy üýtgeýän üýtgeýjiniň ady we paroly bolar . Geliň, konstruktorlary döredeliň (deslapky we iki bahany hem kabul eder), getterler / sazlaýjylar, toString () usulyny , şeýle hem deň () we hashCode () usullaryny ýok edeliň . Javaagny, synp döredenimizde mynasyp Java döredijiniň edýän zatlarynyň hemmesini ederis.
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;
    }
}
Indi ulanyjylaryň sanawyny döredip bileris. Ulanyjylary goşarys we olary görkezmek üçin nireden alarys. Şeýle-de bolsa, bir mesele bar. Hyzmat ediş obýektlerimizi döredenok, Tomkat muny biziň üçin edýär . Olarda ýokaşdyrýan usullarymyz hem eýýäm kesgitlenildi we parametr goşup bilmeris. Onda nädip iki hyzmatkärimize görünýän umumy sanawy döredip bileris? Her servletde diňe öz sanaw obýektimizi döreden bolsak, ulanyjylary bir sanawa goşarys we ListServlet servletini ulanýanlaryň sanawyny başga birine görkezeris. Netijede, iki hyzmat ediş üçin umumy boljak bir zat gerek. Umuman aýdanymyzda, programmamyzdaky ähli synplar üçin umumy bir obýekt gerek; tutuş programma üçin ýeke-täk obýekt. Dizaýn nagyşlary hakda bir zat eşitdiňiz diýip umyt edýärin. Mümkin, käbirleri üçin bu programmada Singleton nagyşyny ulanmagyň ilkinji hakyky zerurlygydyr. Iki gezek barlamak we sinhronizasiýa bilen ýoýulyp, ajaýyp Singleton döredip bilersiňiz (hawa, Tomkat dürli sapaklarda servletleri işledýändigi sebäpli köp sapakly programma bar), ýöne bu opsiýany irki başlangyç bilen ulanaryn, sebäbi bu ýerde gaty amatly ýeterlik we bu biziň maksatlarymyza laýyk gelýär.

Model döretmek

Geliň, model paketinde synp döredeliň (we ondaky Singleton nagyşyny durmuşa geçireliň ) we adaty bolmadyk bir zat diýeliň. Model diýeliň . Geliň, synpymyzda şahsy ulanyjy sanawy obýektini döredeliň we iki usuly durmuşa geçireliň: biri ulanyjy goşup bileris, ikinjisi setirleriň sanawyny (ulanyjy atlary) yzyna gaýtaryp bereliň. Ulanyjy obýektimiziň adyndan we parolyndan ybaratdygy we ulanyjy parollaryny “açmak” islemeýändigimiz sebäpli diňe atlaryň sanawy bolar.
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 hakda azajyk

Singleton hakda eşideniňizden soň , başga bir dizaýn nagşy - MVC (model-görnüş-gözegçilik ediji, rus model-görnüş-kontrolleýjisinde ýa-da iňlis model-görnüş-gözegçilik ediji ýaly) hakda eşiden bolsaňyz gerek . Onuň düýp manysy, iş logikasyny prezentasiýadan aýyrmak. .Agny, nädip görkezmelidigini kesgitleýän koddan näme etmelidigiňizi kesgitleýän kody aýyryň. Görmek (görmek ýa-da ýönekeý görnüşde görmek) käbir maglumatlaryň berilýän görnüşi üçin jogapkärdir. Biziň ýagdaýymyzda, görnüşler JSP sahypalarymyzdyr. Şonuň üçin olary görnüşler atly bukja saldym . Model, programmanyň işleýän hakyky maglumatlarydyr. Biziň ýagdaýymyzda bular ulanyjylar (ulanyjylaryň sanawy). Garaz, dolandyryjylar olaryň arasyndaky birleşdiriji baglanyşykdyr. Modelden maglumatlary alýarlar we görnüşlere geçirýärler (ýa-da Tomkatdan käbir maglumatlary alýarlar, gaýtadan işleýärler we modele geçirýärler). Iş logikasy (programmanyň takyk etmeli zady) modelde ýa-da görnüşde däl-de, olarda beýan edilmeli. Şeýlelikde, her kim öz işini edýär:
  • model maglumatlary saklaýar;
  • görnüşler maglumatlaryň ajaýyp görnüşini görkezýär;
  • dolandyryjylar maglumatlary gaýtadan işleýärler.
Bu, programma bir synpdaky ähli kodlary gaty köp zyňmak däl-de, gaty ýönekeý we dowam etdirmäge mümkinçilik berýär. MVC diňe bir web programmirlemek üçin däl, eýsem bu ugurda köplenç (hemişe diýen ýaly) duş gelýär. Biziň ýagdaýymyzda, hyzmatkärler gözegçilik ediji hökmünde çykyş eder. Bu nagşyň gaty ýüzleý we gysga beýany, ýöne MVC bu makalanyň esasy mowzugy däl. Kim has köp bilmek isleýär - Google halas edýär! Ulanyjy goşmak üçin forma dörediň Add.jsp faýlyna iki tekst giriş meýdanyndan (biri yzygiderli, beýlekisi parol) we serwere maglumat ibermek düwmesinden ybarat bir forma goşalyň.
<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>
Bu ýerde forma baha ýazgysy bilen usul aýratynlygy bar . Bu, bu görnüşdäki maglumatlaryň POST haýyşy görnüşinde serwere iberiljekdigini aňladýar. Hereket atributy görkezilmedi, bu haýyş bu sahypa giden ýerimize ( / goşmak ) şol bir adrese iberiler . Şeýlelik bilen, bu adrese bagly bolan hyzmatçymyz, GET haýyşyny alanymyzdan soň, ulanyjylary goşmak üçin bu jsp-y yzyna gaýtaryp berýär we POST haýyşyny alsa, bu formanyň maglumatlaryny şol ýere iberendigini aňladýar (biz ondan çekeris ) obýekti doPost () Giriş meýdanlarynyň at parametriniň bardygyny bellemelidiris (ady bolan bir meýdan üçin, onuň bahasy ady bar, paroly bolan meýdan üçin bolsa bahasy geçýär ). Bu gaty möhüm nokat. Talapdan (eýýäm serwletiň içinde) bu maglumatlary (giriziljek at we parol) almak üçin, bu atlary ulanarys we geçeris . Emma soňrak. Maglumat ibermek üçin düwmäniň özi , adatça bolşy ýaly çykyş meýdany hökmünde däl-de, düwme görnüşinde ýasalýar . Bu opsiýanyň näderejede uniwersaldygyny bilemok, ýöne bu meniň üçin işleýär (Chrome brauzeri).

POST haýyşyny servlet bilen işlemek

AddServlet servletine gaýdyp geleliň . Youatladýaryn, hyzmatçymyzyň GET haýyşlaryny “tutup” bilmegi üçin HttpServlet synpyndan doGet () usulyny ýok etdik . Serwletimize POST haýyşlaryny hem tutmagy öwretmek üçin doPost () usulyny hem ýok etmeli . Tomkatdan şuňa meňzeş haýyş we jogap obýektlerini alar , biz bilen işleşeris. Ilki bilen, haýyşdan adyň we formanyň iberen parametrlerinden geçeliň (eger görnüşde başgaça at beren bolsaňyz, şol ýazýan atlaryňyz). Ondan soň, alnan maglumatlary ulanyp, ulanyjy obýektimizi dörederis. Soňra model obýektini alarys we döredilen ulanyjyny modele goşarys.
@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);
}

Görmek üçin maglumatlary geçirmek

“ListServlet” hyzmatyna geçeliň . DoGet () usuly bu ýerde eýýäm amala aşyryldy , ol diňe sanawy list.jsp görnüşine geçirýär . Entek ýok bolsa, AddServlet servletinden şol bir usul bilen meňzeşlik bilen ýerine ýetiriň . Indi modelden ulanyjy atlarynyň sanawyny alyp, olary kabul edip, owadan görkezjek görnüşe geçirmek gowy bolardy. Munuň üçin Tomkatdan alan haýyş obýektimizi ýene ulanarys . Bu obýekte bir at goşup, oňa belli bir at berip bileris we aslynda görmek üçin geçirmek isleýän obýektimiziň özi . Executionerine ýetiriş amalyny servletden görnüşe geçirenimizde, hyzmatçynyň özi alan şol bir haýyşy we jogap obýektlerini şol ýerden geçirýäris, soňra atlar sanawymyzy haýyş obýektine goşup, bu haýyşdan başlap bileris görnüşdäki obýekt ulanyjy atlarymyzyň sanawyny dörediň we alyň. “ListServlet” synpy bilen gutardyk , şonuň üçin tutuş synpyň kody:
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 faýllarynda java koduny ýerine ýetirmek

List.jsp faýlynda işe başlamagyň wagty geldi . Diňe “ListServlet” ýerine ýetiriş amalyny şu ýerden geçende ýerine ýetirer . Mundan başga-da, şol servletde eýýäm modelden ulanyjy atlarynyň sanawyny taýýarladyk we haýyş obýektinde şu ýere geçirdik. Atlarymyzyň sanawy bolansoň, onuň üstünden aýlanyp , her ady çap edip bileris. Öň hem aýdyşym ýaly, jsp faýllary java koduny ýerine ýetirip biler (bu olary statiki html sahypalaryndan tapawutlandyrýan zat). Käbir kodlary ýerine ýetirmek üçin aşakdaky gurluşygy zerur ýerimize goýmak ýeterlikdir:
<!-- html code -->
<%
    // java code
%>
<!-- html code -->
Bu konstruksiýanyň içinde birnäçe üýtgeýjä girip bileris:
  • haýyş , hyzmat edişden diňe req diýlip atlandyrylýan haýyş obýektimizdir ;
  • jogap - servletdäki resp diýilýän jogap obýekti ;
  • JspWriter görnüşiniň (adaty iterazyjydan miras galan) obýekti bolup , onuň kömegi bilen html sahypasyna gönüden-göni bir zat "ýazyp" bileris. Out.println ("Salam dünýä!") Giriş System.out.println ("Salam dünýä!") Girişine gaty meňzeýär , ýöne ikisini bulaşdyrmaň!
    out.println () html sahypasyna “ýazýar”, System.out.println bolsa ulgam çykyşyna ýazýar. Java kodly bölümiň içindäki jsp usuly System.out.println () diýip atlandyrsaňyz, netijeleri sahypada däl-de, Tomcat konsolynda görersiňiz .

Jsp-dan başga elýeterli zatlary şu ýerden gözläp bilersiňiz . Talap obýektini ulanyp , servletden geçen atlaryň sanawyny alyp bileris (bu obýektiň degişli atributyny goşduk) we daşarky obýekti ulanyp , bu atlary görkezip bileris. Geliň muny edeliň (häzirlikçe diňe html sanawy görnüşinde):
<ul>
    <%
        List<String> names = (List<String>) request.getAttribute("userNames");

        if (names != null && !names.isEmpty()) {
            for (String s : names) {
                out.println("<li>" + s + "</li>");
            }
        }
    %>
</ul>
Sanawy diňe ulanyjylar bar bolsa görkezmeli we başgaça ulanyjy ýok diýen duýduryşy görkezmeli bolsaňyz, bu bölümi biraz täzeden ýazyp bileris:
<%
    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>");
%>
Hyzmatlardan maglumatlary görnüşe geçirip bilsek, ulanyjy üstünlikli goşulanda habarnamanyň görkezilmegi üçin AddServlet- i birneme gowulaşdyryp bileris. Munuň üçin, doPost () usulynda , modele täze ulanyjy goşanymyzdan soň, bu ulanyjynyň adyny req obýektiniň atributlaryna goşup bileris we dolandyryşy add.jsp görnüşine geçirip bileris . Onda eýýäm Java kody bilen bir bölüm düzüň, onda şeýle atributyň haýyşda bardygyny ýa-da ýokdugyny barlamak, şeýle bolsa, ulanyjynyň üstünlikli goşulandygyny görkezýän habar çykaryň. Bu üýtgeşmelerden soň, doly AddServlet servlet kody şuňa meňzeýär:
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);
    }
}
Bu ýerde, doPost () usulynyň ahyrynda , modele goşulan ulanyjynyň ady bilen bir atribut goýduk, şondan soň häzirki haýyşy we jogaby geçirýän doGet () usuly diýýäris. DoGet () usuly eýýäm gözegçiligi görnüşe geçirýär, ol ýerde atribut hökmünde goşulan ulanyjynyň ady bilen haýyş obýektini iberýär. Galan zat, add.jsp-ny düzetmek , şeýle atribut bar bolsa şeýle habarnamany görkezer. Iň soňky add.jsp :
<%@ 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>
Sahypanyň mazmuny:
  • sözbaşy bilen div-a;
  • mazmun üçin div konteýner, ulanyjy ady bilen bir atributyň bardygyny ýa-da ýokdugyny barlaýar;
  • ulanyjylary goşmak üçin forma bilen bölmek;
  • we ahyrynda esasy sahypa dolanmak üçin düwme bilen aşaky sözbaşy bar.
Diwlar gaty köp ýaly bolup biler, ýöne stil goşanymyzda soň ulanarys. Iň soňky sanaw.jsp :
<%@ 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>
Şeýlelikde, ulanyjylary saklap we goşup, şeýle hem atlarynyň sanawyny görkezip bilýän doly işleýän web programmasy bar. Galan zat ony bezemek ... :)

Stil goşmak. W3.CSS çarçuwasyny ulanýarys

Häzirki wagtda programmamyz işleýär, ýöne düýbünden däli. Şonuň üçin fon, tekstiň we düwmeleriň reňkini, stil sanawlaryny goşarys, deňleşdireris, indentler goşarys we şuňa meňzeşler. Stilleri el bilen ýazsaňyz, köp wagt we nerw gerek bolup biler. Şonuň üçin W3.CSS CSS çarçuwasyny ulanmagy maslahat berýärin. Onda eýýäm stil bilen taýýar synplar bar, galan zat, ulanmak isleýän CSS synplarymyzy dogry ýerlerde goýmak. Olary sahypalarymyza goşmak üçin ilki bilen stilli bir faýl goşarys. Muny iki ýol bilen edip bolar:
  1. sahypalarymyzy gözden geçiriň we baş bölümde stil bilen faýla göni baglanyşyk goýuň

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

    Üznüksiz internet birikmesi bar bolsa, bu opsiýa amatlydyr. Soňra, ýerli serwerde sahypalaryňyzy açanyňyzda, stiller internetden çekiler.


  2. Locallyerli stilleriň hemmesine eýe bolmak we internet birikmesine bagly däl bolmak isleseňiz, faýly stil bilen göçürip alyň we web bukjasynyň bir ýerine ýerleşdiriň (mysal üçin, web / styles / w3.css ), soň hemmämiziň üstümizden geçiň sahypalar ( index.html, add.jsp, list.jsp ) we baş faýlyň içindäki stiller bilen bu faýla baglanyşyk giriziň

    <link rel = "stil sahypasy" href = "stil / w3.css">

    Ondan soň diňe belliklerden geçiň we halaýan stilleriňizi goşuň. Bu barada jikme-jik durup geçmerin, ýöne tertipli stil sapaklary bilen üç faýlymyň taýýar wersiýalaryny derrew bererin.

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>
Bularyň hemmesi :) Eger-de soraglaryňyz bar bolsa ýa-da teswirleriňiz bar bolsa ýa-da tersine, bir zat netije bermese - teswir ýazyň. UPD: düwmelere basanyňyzda 404 ýalňyşlyk bar bolsa, hemme zat dogry ýerine ýetirilen bolsa-da, ideýadaky ýerleşdiriş konfigurasiýasyny düzedip bilersiňiz. Munuň üçin konfigurasiýalary redaktirlemäge (başlangyç düwmesiniň ýokarsynda), penjiräniň sag tarapyndaky Gurnama goýmasyna girmeli we Programma kontekstinde diňe görkezilýändigine göz ýetirmeli / Bolýar, men ' bularyň hemmesinden çykan zatlaryň bir-iki sany skrinşotyny goşaryn.
Servlets we jsp (2-nji bölüm) - 2 ulanyp, ýönekeý web programmasyny döretmek
Servlets we jsp (2-nji bölüm) - 3 ulanyp, ýönekeý web programmasyny döretmek
Servlets we jsp (2-nji bölüm) - 4 ulanyp, ýönekeý web programmasyny döretmek
Netijede , bu taslama bilen meşgullanmak isleseňiz, synap bilersiňiz:
  • Ulanyjyny we bar bolan ulanyjyny üýtgetmek / redaktirlemek üçin hyzmat we jsp ýasamak. Hakyky CrUD web programmasyny alarsyňyz :) servletlerde));
  • sanawy (Sanawy) maglumatlar bazasy bilen işlemek bilen çalşyň, goşulan ulanyjylar serweri täzeden açanyňyzdan soň ýitmezler :)
Sag boluň!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION