JavaRush /Java блогы /Random-KK /Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны жаса...
Стас Пасинков
Деңгей
Киев

Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны жасау (2-бөлім)

Топта жарияланған
Сервлеттер мен jsp көмегімен қарапайым веб-бағдарлама жасау (1-бөлім) Мақаланы түсіну үшін қажетті білім деңгейі: сіз Java Core бағдарламасын азды-көпті түсіндіңіз және JavaEE технологиялары мен веб-бағдарламалауды қарастырғыңыз келеді. Егер сіз қазір мақалаға жақын тақырыптарды қамтитын Java Collections квестін оқып жатсаңыз, бұл өте мағыналы болады.
Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны жасау (2-бөлім) - 1

Нысандарды құру

Объектілер пакетінде біз User класын жасаймыз және онда екі жеке жолдық айнымалылар аты мен құпия сөз болады . Конструкторларды (әдепкі және екі мәнді де қабылдайтын біреуін), қабылдағыштарды/қондырғыштарды жасайық, әрбір жағдайда toString() әдісін , сондай-ақ equals() және hashCode() әдістерін қайта анықтаймыз . Яғни, сыныпты құру кезінде лайықты Java әзірлеушісінің барлығын жасаймыз.
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;
    }
}
Енді біз пайдаланушылар тізімін жасауға кірісе аламыз. Біз оған пайдаланушыларды қосамыз және оларды көрсету үшін қай жерден аламыз. Дегенмен, бір мәселе бар. Біз сервлет нысандарын жасамаймыз, Tomcat мұны біз үшін жасайды . Оларда біз қайта анықтайтын әдістер біз үшін әлдеқашан анықталған және біз параметрді қоса алмаймыз. Екі сервлетке де көрінетін ортақ тізімді қалай жасауға болады? Егер біз жай ғана әрбір сервлетте өз тізім нысанымызды жасайтын болсақ, біз бір тізімге пайдаланушыларды қосатынымыз және ListServlet сервлетін пайдаланатын пайдаланушылар тізімін басқа тізімге көрсететініміз шығады . Бізге екі сервлетке ортақ болатын нысан керек болып шықты. Жалпы айтқанда, бізге бағдарламамыздағы барлық сыныптарға ортақ болатын an object қажет; бүкіл бағдарлама үшін жалғыз an object. Сіз дизайн үлгілері туралы бірдеңе естідіңіз деп үміттенемін. Және, мүмкін, кейбіреулер үшін бұл Singleton үлгісін өз бағдарламасында пайдаланудың бірінші нақты қажеттілігі . Сіз бұрмаланып, қосарланған тексерулер мен синхрондау арқылы керемет Singleton жасай аласыз (иә, бізде көп ағынды қолданба бар, өйткені Tomcat әртүрлі ағындардағы сервлеттерді іске қосады), бірақ мен ертерек инициализациялау опциясын қолданамын, өйткені бұл жерде ол өте қолайлы. жеткілікті және бұл біздің мақсаттарымызға сәйкес келеді.

Модель құру

Үлгі бумасында класс жасап (және оған Singleton үлгісін енгізейік ) және оны әдеттен тыс нәрсе деп атайық. Модель делік . Біздің сыныпта жеке пайдаланушылар тізімінің нысанын жасайық және екі әдісті жүзеге асырайық: біреуі пайдаланушыны қосу үшін, екіншісі жолдар тізімін (пайдаланушы аттары) қайтару үшін. Біздің пайдаланушы нысанымыз атау мен құпия сөзден тұратындықтан және біз пайдаланушы құпия сөздерін «ашуды» қаламайтындықтан, бізде тек атаулар тізімі болады.
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 туралы аздап

Singleton туралы естігендіктен , сіз басқа дизайн үлгісі туралы естіген шығарсыз - MVC (модель-көрініс-контроллер, орыс тілінде модель-көрініс-контроллер немесе ағылшынша модель-көрініс-контроллер сияқты). Оның мәні бизнес логикасын презентациядан ажырату болып табылады. Яғни, не істеу керектігін анықтайтын codeты көрсету жолын анықтайтын codeтан бөліңіз. Көрініс (көрініс немесе жай көріністер) кейбір деректер ұсынылған пішінге жауап береді. Біздің жағдайда көріністер біздің JSP беттері болып табылады. Сондықтан мен оларды көріністер деп аталатын қалтаға қойдым . Модель - бұл бағдарлама жұмыс істейтін нақты деректер. Біздің жағдайда бұл пайдаланушылар (пайдаланушылардың тізімі). Ал, контроллерлер олардың арасындағы байланыстырушы буын болып табылады. Олар модельден деректерді алады және оны көріністерге береді (немесе Tomcat-тен кейбір деректерді алады, оны өңдейді және үлгіге береді). Іскерлік логиканы (бағдарламаның нақты не істеуі керек) үлгіде немесе көріністе емес, оларда сипатталуы керек. Осылайша, әркім өз ісін жасайды:
  • модель деректерді сақтайды;
  • көріністер деректердің әдемі көрінісін салады;
  • контроллерлер деректерді өңдеумен айналысады.
Бұл бір сыныптағы барлық codeтардың құбыжық қоқысынан гөрі, бағдарламаға қарапайым және техникалық қызмет көрсетуге мүмкіндік береді. MVC веб-бағдарламалау үшін ғана қолайлы емес, бірақ ол осы салада әсіресе жиі кездеседі (әрдайым дерлік). Біздің жағдайда сервлеттер контроллер ретінде әрекет етеді. Бұл үлгінің өте үстірт және қысқаша сипаттамасы, бірақ MVC осы мақаланың негізгі тақырыбы емес. Кім көбірек білгісі келеді - Google көмекке! Пайдаланушыны қосуға арналған пішін жасау Add.jsp файлына екі мәтін енгізу өрісінен (біреуі кәдімгі, екіншісі құпия сөз) және деректерді serverге жіберу түймешігінен тұратын пішінді қосайық.
<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>
Мұнда пішінде мән посты бар әдіс атрибуты бар . Бұл осы пішіндегі деректер serverге POST сұрауы түрінде жіберілетінін білдіреді. Әрекет атрибуты көрсетілмеген, яғни сұрау біз осы бетке өткен мекенжайға жіберіледі ( /add ). Осылайша, осы мекен-жайға байланыстырылған біздің сервлет GET сұрауын алғаннан кейін пайдаланушыларды қосу пішінімен осы jsp файлын қайтарады және егер ол POST сұрауын алса, бұл пішін өз деректерін сол жерге жібергенін білдіреді (біз оны мына жерден шығарамыз) . doPost() Енгізу өрістерінде атау параметрі бар екенін атап өткен жөн (аты бар өріс үшін оның мән атауы, ал құпия сөзі бар өріс үшін pass мәні бар ). Бұл өте маңызды нүкте. Бұл деректерді (енгізілетін атау мен құпия сөзді) сұраудан алу үшін (сервлет ішінде) біз дәл осы атауды қолданамыз және . Бірақ бұл туралы кейінірек. Деректерді жіберу түймесі әдетте әдеттегідей шығыс өрісі ретінде емес, қайтадан түйме түрінде жасалады . Мен бұл опцияның қаншалықты әмбебап екенін білмеймін, бірақ ол мен үшін жұмыс істейді (Chrome браузері).

POST сұрауын сервлетпен өңдеу

AddServlet сервлетіне оралайық . Еске сала кетейін: біздің сервлет GET сұрауларын «ұстап алуы» үшін HttpServlet сыныбынан doGet() әдісін қайта анықтадық . Сервлетке POST сұрауларын да қабылдауды үйрету үшін doPost() әдісін қайта анықтауымыз керек . Ол Tomcat- тен ұқсас сұрау және жауап нысандарын алады , біз олармен жұмыс істейміз. Алдымен сұраудан атауды шығарып алайық және пішін жіберген параметрлерді жіберейік (егер сіз оларды пішінде басқаша атасаңыз, онда бұл сіз жазатын атаулар). Осыдан кейін біз алынған деректер арқылы пайдаланушы an objectісін жасаймыз. Содан кейін модель an objectісін аламыз және жасалған пайдаланушыны модельге қосамыз.
@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);
}

Көру үшін деректерді беру

ListServlet сервлетіне көшейік . Бұл жерде doGet() әдісі әлдеқашан енгізілген , ол басқаруды list.jsp көрінісіне жай ғана тасымалдайды . Егер сізде бұл әлі жоқ болса, оны AddServlet сервлетіндегі бірдей әдіске ұқсас етіп жасаңыз . Енді модельден пайдаланушы аттары тізімін алып, оларды қабылдайтын және әдемі көрсететін көрініске жіберген дұрыс. Мұны істеу үшін біз Tomcat- тен алған сұрау нысанын қайтадан қолданамыз . Біз осы нысанға атрибут қоса аламыз, оған қандай да бір атауды және, шын мәнінде, біз қарауға көшіргіміз келетін нысанның өзі . Орындау процесін сервлеттен көрініске тасымалдау кезінде біз сол сервлеттің өзі алған сұраныс пен жауап нысандарын жібереміз, содан кейін сұрау нысанына атаулар тізімін қосу арқылы біз осы сұраудан аламыз. Көріністегі нысан пайдаланушы аттары тізімін жасаңыз және алыңыз. Біз ListServlet сыныбымен жұмыс істейміз , сондықтан мұнда бүкіл сыныптың codeы берілген:
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 файлдарында java codeын орындау

list.jsp файлымен жұмысты бастау уақыты келді . Ол ListServlet орындау процесін осы жерден өткізгенде ғана орындалады . Бұған қоса, сол сервлетте біз үлгідегі пайдаланушы аттары тізімін дайындап қойдық және оны осында сұрау нысанында жібердік. Бізде атаулар тізімі болғандықтан, біз оны айналдырып , әрбір атауды басып шығара аламыз. Жоғарыда айтқанымдай, jsp файлдары java codeын орындай алады (бұл оларды статикалық html беттерінен ерекшелендіреді). Кейбір codeты орындау үшін бізге қажет жерге келесі құрылысты қою жеткілікті:
<!-- html code -->
<%
    // java code
%>
<!-- html code -->
Бұл құрылымның ішінде біз бірнеше айнымалыларға қол жеткізе аламыз:
  • сұрау – бұл жай ғана req деп аталатын сервлеттен берілген сұрау нысанымыз ;
  • responce - сервлетте resp деп аталатын жауап беру нысаны ;
  • out — JspWriter түрінің an objectісі (әдеттегі Жазушыдан мұраланған ), оның көмегімен біз тікелей html бетінің өзіне бірдеңені «жазуға» болады. out.println("Hello world!") жазбасы System.out.println("Hello world!") жазбасына өте ұқсас , бірақ екеуін шатастырмаңыз!
    out.println() html бетіне «жазады», ал System.out.println жүйе шығысына жазады. Java codeы бар бөлімнің ішінде jsp әдісін System.out.println() деп атасаңыз, нәтижелерді бетте емес, Tomcat консолінде көресіз .

jsp ішіндегі басқа қолжетімді нысандарды осы жерден іздеуге болады . Сұраныс нысанын пайдалана отырып , біз сервлеттен жіберілген атаулар тізімін ала аламыз (бұл нысанға сәйкес атрибутты тіркедік), ал out нысанын пайдаланып , біз бұл атауларды көрсете аламыз. Мұны істейік (әзірше тек html тізімі түрінде):
<ul>
    <%
        List<String> names = (List<String>) request.getAttribute("userNames");

        if (names != null && !names.isEmpty()) {
            for (String s : names) {
                out.println("<li>" + s + "</li>");
            }
        }
    %>
</ul>
Егер пайдаланушылар бар болса ғана тізімді көрсету керек болса және әйтпесе әлі пайдаланушылар жоқ екендігі туралы ескертуді көрсету қажет болса, біз бұл бөлімді аздап қайта жаза аламыз:
<%
    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>");
%>
Енді біз деректерді сервлеттерден көріністерге жібере алатындықтан, пайдаланушы сәтті қосылған кезде хабарландыру көрсетілу үшін AddServlet-ті сәл жақсарта аламыз. Мұны істеу үшін, doPost() әдісінде үлгіге жаңа пайдаланушыны қосқаннан кейін біз осы пайдаланушының атын req нысанының атрибуттарына қосып , басқаруды add.jsp көрінісіне қайтара аламыз . Онда Java codeы бар бөлімді жасаңыз, онда мұндай атрибуттың сұрауда бар-жоғын тексеру жүргізіледі, егер солай болса, пайдаланушы сәтті қосылғаны туралы хабарламаны шығарыңыз. Осы өзгерістерден кейін толық AddServlet сервлет codeы келесідей болады:
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);
    }
}
Мұнда, doPost() әдісінің соңында біз модельге қосылған пайдаланушы атымен атрибут орнатамыз, содан кейін біз doGet () әдісін шақырамыз , оған ағымдағы сұраныс пен жауапты жібереміз. Және doGet() әдісі басқаруды көрініске әлдеқашан тасымалдайды, онда ол атрибут ретінде тіркелген қосылған пайдаланушы атымен сұрау нысанын жібереді. Қалған нәрсе, егер мұндай төлсипат бар болса, ол осындай хабарландыруды көрсететін add.jsp файлын түзету болып табылады. Соңғы 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>
Беттің негізгі бөлігі мыналардан тұрады:
  • div-a тақырыбы бар;
  • мазмұнға арналған div контейнері, ол пайдаланушы аты бар төлсипаттың бар-жоғын тексереді;
  • пайдаланушыларды қосу пішіні бар div;
  • және соңында негізгі бетке оралу үшін түймесі бар төменгі колонтитул бар.
Тым көп div бар сияқты көрінуі мүмкін, бірақ біз оларды кейінірек стильдерді қосқанда пайдаланамыз. Соңғы list.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>
Осылайша, бізде пайдаланушыларды сақтауға және қосуға, сондай-ақ олардың атауларының тізімін көрсете алатын толық жұмыс істейтін веб-бағдарлама бар. Оны безендіру ғана қалды... :)

Стильдерді қосу. Біз W3.CSS құрылымын қолданамыз

Қазіргі уақытта біздің қолданба жұмыс істейді, бірақ мүлдем ақылсыз. Сондықтан біз фон, мәтін мен түймелердің түсін, стиль тізімдерін қосамыз, туралау жасаймыз, шегіністерді қосамыз және т.б. Егер стильдерді қолмен жазсаңыз, бұл көп уақыт пен жүйкені алуы мүмкін. Сондықтан мен W3.CSS CSS құрылымын пайдалануды ұсынамын. Оның қазірдің өзінде стильдері бар дайын сабақтары бар; біз қолданғымыз келетін CSS сыныптарын дұрыс орындарға орналастыру ғана қалады. Оларды біздің беттерімізге қосу үшін алдымен стильдері бар файлды қосамыз. Мұны екі жолмен жасауға болады:
  1. беттерімізді аралап, бас бөлімінде стильдері бар файлға тікелей сілтемені енгізіңіз

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

    Бұл опция тұрақты Интернет байланысы болса қолайлы. Содан кейін беттерді жергілікті serverде ашқанда, стильдер Интернеттен алынады.


  2. Барлық стильдердің жергілікті болуын қаласаңыз және Интернет қосылымына тәуелді болғыңыз келсе, мәнерлері бар файлды жүктеп алып, оны веб-қалтаның ішіне орналастырыңыз ( мысалы, web/styles/w3.css ), содан кейін біздің барлық стильдерді қарап шығыңыз. беттер ( index.html, add.jsp, list.jsp ) және бас бөлімінің ішіндегі мәнерлері бар осы файлға сілтемені енгізіңіз

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

    Осыдан кейін, тегтерді аралап, өзіңізге ұнайтын стильдерді қосыңыз. Мен бұл туралы егжей-тегжейлі тоқталмаймын, бірақ реттелген стиль сыныптары бар үш файлымның дайын нұсқаларын дереу беремін.

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>
Барлығы осы :) Егер сізде әлі де сұрақтарыңыз болса немесе түсініктемелеріңіз болса, немесе керісінше, бірдеңе жұмыс істемесе - түсініктеме қалдырыңыз. UPD: түймелерді басу кезінде 404 қателері бар болса, бәрі дұрыс орындалғанымен, идеядағы орналастыру конфигурациясын түзету керек болуы мүмкін. Ол үшін конфигурацияларды өңдеу бөліміне өту керек (бастау түймешігінің жоғарғы жағында), терезенің оң жағындағы Орналастыру қойындысына өтіп, Қолданба контекстінде ол жай ғана көрсетілгеніне көз жеткізіңіз / Жақсы, мен' Осының барлығынан шыққан бірнеше скриншотты қоса беремін.
Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны құру (2-бөлім) - 2
Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны құру (2-бөлім) - 3
Сервлеттер мен jsp көмегімен қарапайым веб-қосымшаны құру (2-бөлім) - 4
Соңында , егер сіз осы жобамен тәжірибе алғыңыз келсе, келесі әрекеттерді орындауға болады:
  • пайдаланушыны жою үшін сервлет және jsp және бар пайдаланушыны өзгерту/өңдеу үшін тағы бірнеше жасаңыз. Сіз сервлеттерде нағыз CrUD веб-қосымшасын аласыз :));
  • қосылған пайдаланушылар serverді қайта іске қосқаннан кейін жоғалып кетпеуі үшін тізімді (Тізім) дерекқормен жұмыс істеумен ауыстырыңыз :)
Іске сәт!
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION