JavaRush /Blog Jawa /Random-JV /Aplikasi pisanan sampeyan nggunakake servlet Java

Aplikasi pisanan sampeyan nggunakake servlet Java

Diterbitake ing grup
Halo kabeh! Ing artikel iki, sampeyan bakal kenal karo konsep pangembangan web dhasar saka servlets lan bisa nulis aplikasi sing gampang digunakake. Aplikasi pisanan sampeyan nggunakake servlet Java - 1Kanggo ngindhari langkah-langkah sing ora perlu, kita ora bakal miwiti saka awal, lan bakal terus nggarap aplikasi saka artikel sadurunge babagan Hibernate . Nanging, wiwit kita mung miwiti karo servlets, Aku dibusak kabeh related kanggo kelas Auto saka aplikasi lan ninggalake mung kelas Panganggo lan tumindak. Struktur proyek bakal katon kaya iki: Aplikasi pisanan sampeyan nggunakake servlet Java - 2Dadi, servlets! Wikipedia ngandika: "A servlet punika antarmuka Jawa kang implementasine ngluwihi fungsi saka server. A servlet interaksi karo klien liwat prinsip request-respon." Lan pancen bener. Ing kene kita pisanan nemokake konsep "arsitektur aplikasi klien-server". Intine cukup prasaja lan pas karo siji gambar (dijupuk saka kene ).
Aplikasi Pisanan Sampeyan Nggunakake Java Servlets - 3
Klien ngubungi server kanthi ngirim panjalukan HTTP. Server ngasilake data sing dibutuhake (contone, nampa saka database) lan bali menyang klien. Conto sing paling gampang: ing jaringan sosial tartamtu sampeyan ngeklik tombol "Kanca" lan kanthi mangkono ngirim panjaluk menyang server. Server mriksa dhaptar kanca ing database lan bali menyang sampeyan (klien). Dhaptar panjalukan HTTP cukup gedhe, nanging yen sampeyan durung nate nemoni, mula luwih becik maca babagan iki, contone, ing kene . Tugas kita yaiku: Nggawe aplikasi CRUD nggunakake servlets. Aplikasi kasebut kudu bisa nggawe, ngowahi, lan mbusak pangguna saka database nggunakake servlet sing ngolah panjaluk HTTP. Aplikasi kita saka artikel babagan Hibernate wis ngerti carane nindakake iki, nanging dikontrol langsung saka kode Jawa, luwih tepat, saka cara utama (). Ing kene panjaluk bakal dikirim dening klien, yaiku sampeyan :) Bab pisanan sing kudu ditindakake yaiku nambah dependensi anyar menyang file pom.xml.
<xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itis4</groupId>
    <artifactId>UsersDaoProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- PostgreSQL  -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4.1212.jre7</version>
        </dependency>

        <!-- Hibernate 5.2.6 Final -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.6.Final</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>

    </dependencies>

</project>
Kita wis nambahake 3 dependensi:
  1. Pustaka javax.servlet-api dhewe;
  2. Pustaka tag JSTL. Bakal dibutuhake kanggo nggawe sisih klien, yaiku kaca JSP;
  3. Spring-WebMVC. Kita butuh siji kelas Spring, sing bakal diomongake mengko.
Operasi servlets dikelola dening wadhah servlet. Ing kasus kita bakal nggunakake Apache Tomcat. Bab sing cukup populer, lan sampeyan bisa uga wis krungu :) Siklus urip servlet kalebu langkah-langkah ing ngisor iki:
  1. Yen ora ana servlet ing wadhah.
    • Kelas servlet dimuat dening wadhah.
    • Wadhah kasebut nggawe conto kelas servlet.
    • Wadhah kasebut nelpon metode init (). Cara iki miwiti servlet lan diarani luwih dhisik sadurunge servlet bisa njaluk panjaluk. Cara init () diarani mung sapisan sajrone siklus urip.
  2. Nglayani panjaluk klien. Saben panjalukan diproses ing utas sing kapisah. Wadhah nelpon cara layanan () kanggo saben request. Cara iki nemtokake jinis panjalukan sing mlebu lan disebarake menyang cara sing cocog karo jinis iki kanggo ngolah panjaluk kasebut. Pangembang servlet kudu nyedhiyakake implementasine kanggo metode kasebut. Yen panjalukan ditampa sing cara ora dileksanakake, diarani metode kelas induk lan biasane diakhiri karo kesalahan sing bali menyang panjaluk.
  3. Yen wadhah kasebut kudu mbusak servlet, diarani cara numpes (), sing mbusak servlet saka layanan. Kaya metode init (), metode iki uga diarani sapisan sajrone siklus servlet kabeh.
Servlet kita bakal katon cukup prasaja:
package servlets;

import models.User;
import services.UserService;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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 UserSimpleServlet extends HttpServlet {

    private UserService service = new UserService();

    public void init(ServletConfig servletConfig) {
        try {
            super.init(servletConfig);
        } catch (ServletException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        List<User> users = service.findAllUsers();
        req.setAttribute("users", users);
        RequestDispatcher dispatcher = req.getRequestDispatcher("/showUsers.jsp");
        dispatcher.forward(req, resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String name = req.getParameter("name");
        int age = Integer.parseInt(req.getParameter("age"));
        User user = new User(name, age);
        service.saveUser(user);
        resp.sendRedirect("/users");

    }

    @Override
    protected void  doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        User user = service.findUser(id);
        user.setName(req.getParameter("name"));
        user.setAge(Integer.parseInt(req.getParameter("age")));
        service.updateUser(user);
        resp.sendRedirect("/users");
    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int id = Integer.parseInt(req.getParameter("id"));
        service.deleteUser(service.findUser(id));
        resp.sendRedirect("/users");
    }
}
Nalika sampeyan bisa ndeleng, ngandhut cara init (), kang diterangake ing ndhuwur, lan ngleksanakake 4 cara sing pas karo papat panjalukan HTTP - doGet (), doPost (), doPut () lan doDelete (). Saben wong bakal ngidini kita, masing-masing, nampa, nggawe, nyunting lan mbusak pangguna. Cara njupuk minangka obyek input saka kelas javax.servlet.http.HttpServletRequest lan javax.servlet.http.HttpServletResponse - yaiku, panjalukan sing dikirim menyang server lan respon sing ditampa klien. Ing metode kasebut, metode kelas UserService sing dibutuhake dieksekusi, tanggapan digawe kanggo klien, banjur dialihake menyang alamat / pangguna. Contone, ing cara doGet () kita entuk dhaptar kabeh pangguna. Sabanjure, kita nggawe obyek saka kelas RequestDispatcher, sing ngidini kita nyakup obyek ing panjalukan Http, uga ngarahake menyang sumber daya tartamtu (contone, kaca JSP klien). Ing cara doPut () (nganyari data pangguna), kita ngolah panjalukan HTTP, ngekstrak id, jeneng lan paramèter umur, temokake pangguna kanthi id sing ditemtokake, nemtokake jeneng lan umur sing ana ing request, lan bali menyang kaca / pangguna. Nanging, supaya kabeh cara iki bisa digunakake kanthi bener, kita kudu ngatur servlet. Kanggo iki, kita nggunakake file web.xml ing folder WEB-INF.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>UserSimpleServlet</servlet-name>
        <servlet-class>servlets.UserSimpleServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>UserSimpleServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <servlet-name>UserSimpleServlet</servlet-name>
    </filter-mapping>

</web-app>
Kabeh tag ing file iki, ing prinsip, intuisi, nanging ayo diterusake kanthi urutan. <welcome-file-list> - kaca JSP wiwitan ditemtokake, sing bakal dibukak dhisik nalika aplikasi diluncurake. Ing kasus kita, iki kaca index.jsp. <servlet> - ndhaptar kelas UserSimpleServlet minangka servlet. <servlet-mapping> minangka tag sing penting banget. Iku nemtokake URL sing bakal diproses dening servlet. Ing kasus kita, iki kabeh URL, supaya kita mung nuduhake "/". Nanging, contone, yen kita duwe aplikasi karo pangguna lan mesin, banjur kita bisa nggawe servlet kapindho - SimpleAutoServlet. Banjur pemetaan kanggo servlet pangguna bakal dadi "/ pangguna" (yaiku, panjaluk sing ana gandhengane karo pangguna pangolahan), lan kanggo servlet otomatis bakal dadi "/ autos". Lan pungkasane, <filter>. Iku nemtokake njero obyek saka kelas org.springframework.web.filter.HiddenHttpMethodFilter. Artikel kasebut ora ana gandhengane karo Spring, mula aku ora bakal ngomong kanthi rinci. Ayo kula ujar manawa ditempelake ing aplikasi kita mung minangka fitur tambahan. Intine yaiku kita bakal nggunakake kaca JSP kanggo nggawe sisih klien. Data kita bakal ditampilake ing kaca minangka tabel kanthi dhaptar pangguna. Ing kaca JSP, tag <form/> HTML bakal digunakake. Lan mung panjalukan HTTP GET lan POST sing bisa digunakake kanggo ngirim data saka <form/>. Yaiku, kanggo kabeh telung operasi - nganyari, mbusak lan nggawe pangguna - kita mung kudu nggunakake panjaluk POST. Nggunakake panjalukan PUT lan DELETE ora bakal kasedhiya kanggo kita. Lan, ing asas, iki cukup normal lan gampang dileksanakake, nanging kelas HiddenHttpMethodFilter ngidini kita nggunakake. Iki bakal nggawe beda antarane operasi ing aplikasi luwih cetha kanggo maca. Pungkasan, ayo pindhah menyang sisih klien. Iki diwakili dening limang kaca JSP. index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Здравствуйте!</title>
</head>
<body>
Если вы хотите начать работу с базой данных пользователей - <br>
нажмите кнопку ниже:

<form action = "users" method="get">
    <input type="submit" value="Начать работу с базой данных">
</form>
</body>
</html>
addUser.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Добавить нового пользователя</title>
</head>
<body>
<form action = "/users" method="post">
    <input required type="text" name="name" placeholder="Name">
    <input required type="text" name="age" placeholder="Возраст">
    <input type="submit" value="Сохранить">
</form>
</body>
</html>
deleteUser.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Удалить пользователя</title>
</head>
<body>

Вы действительно хотите удалить пользователя ${param.id}?

&lform action="/users/${param.id}" method="post">
    <input type="hidden" name="id" value="${param.id}">
    <input type="hidden" name="_method" value="delete">
    <input type="submit" value="Удалить">
</form>

</body>
</html>
showUsers.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Список пользователей</title>
</head>
<body>
<table border="2">
    <tr>
        <td>ID</td>
        <td>Name</td>
        <td>Возраст</td>
        <td>Действия</td>
    </tr>
    <c:forEach items="${users}" var = "user">
        <tr>
            <td>${user.getId()}</td>
            <td>${user.getName()}</td>
            <td>${user.getAge()}</td>
            <td>
                <form action = "updateUser.jsp" method="post">
                    <input type="hidden" name="id" value="${user.getId()}">
                    <input type="hidden" name="name" value="${user.getName()}">
                    <input type="hidden" name="age" value="${user.getAge()}">
                    <input type="submit" value="Изменить" style="float:left">
                </form>
                <form action="deleteUser.jsp" method="post">
                    <input type="hidden" name="id" value="${user.getId()}">
                    <input type="submit" value="Удалить" style="float:left">
                </form></td>
        </tr>
    </c:forEach>
</table>

<form action = "addUser.jsp">
    <input type="submit" value="Добавить нового пользователя">
</form>
</body>
</html>
updateUser.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Изменить данные пользователя</title>
</head>
<body>

Редактировать пользователя

<form action="/users/${param.id}" method="post">
    <input type="hidden" name = "id" value="${param.id}">
    <input type="text" name="name" value="${param.name}" placeholder=${param.name}>
    <input type="text" name="age" value="${param.age}" placeholder=${param.age}>
    <input type="hidden" name="_method" value="put">
    <input type="submit" value="Обновить">
</form>

</body>
</html>
Kaca JSP (Java Server Page) ngemot rong jinis teks: data sumber statis, sing bisa dadi salah sawijining format teks (HTML, SVG, WML, utawa XML), lan unsur JSP, sing nggawe konten dinamis. Kanggo ngerti apa JSP, aku bakal ngidini aku nyalin lan nempel potongan artikel sing apik banget dening siji penulis ( saka kene ). "Ateges, JSP diowahi dadi servlet nalika pisanan diakses lan bisa digunakake minangka servlet. Iki penting banget kanggo dimangerteni. JSP dudu kaca kaya kaca HTML - penting kanggo programmer pemula kanggo ngerti kanthi jelas yen iki iku servlet liyane - sampeyan mung ora perlu kanggo program output sawijining. Sampeyan mung bisa nggambar. Lan ngganti data ing panggonan tengen. Nanging wiwit kaca JSP ing paling piye wae meh podho HTML, temenan bakal luwih gampang kanggo desainer. Lan aku sepisan maneh STRONGLY marang pamula - JSP iku SERVLET . Disiapake karo kabeh data ing server. Iki ngendi kabeh data dilebokake. Lan pangguna nampa kaca HTML siap-digawe ing browser, kang ora duwe tandha-tandha Jawa." Sampeyan bisa ndeleng dhewe yen kaca JSP pancen servlet, amarga saben kaca ngemot cara sing kudu dieksekusi. Contone, kaca wiwitan index.jsp nyatakake yen sampeyan ngeklik tombol "Mulai nggarap database", method="get" bakal dieksekusi. Ing kaca addUser.jsp, sing tanggung jawab kanggo nggawe pangguna anyar, nalika sampeyan ngeklik tombol simpen, metode = "post" bakal dieksekusi. Liyane saka JSP kasusun saka markup HTML statis biasa, supaya kita ora bakal manggon ing rinci - iki topik artikel kapisah, kang ana akeh ing Internet. Dadi, kita wis nggawe aplikasi kita, sing isih ana yaiku kanggo nyoba ing tumindak! Kanggo nindakake iki, kita butuh wadhah servlet Apache Tomcat sing kasebut ing ndhuwur. Sampeyan bisa ngundhuh kucing saka situs web resmi (Aku nggunakake versi 8). Sabanjure, kita kudu nggawe konfigurasi ing IDEA kanggo mbukak aplikasi liwat Tomcat. Kanggo nindakake iki, bukak tab "Sunting Konfigurasi", Aplikasi Pisanan Sampeyan Nggunakake Java Servlets - 4gawe konfigurasi anyar Aplikasi pisanan sampeyan nggunakake Java Servlets - 5lan pilih Server Tomcat Lokal. Ing tab Server Aplikasi, nemtokake path menyang folder ing ngendi Tomcat dumunung.Sabanjure Aplikasi Pisanan Sampeyan Nggunakake Java Servlets - 6, pindhah menyang tab Deployment. Aplikasi Pisanan Sampeyan Nggunakake Java Servlets - 7Ing kene kita ngatur panyebaran aplikasi ing server lokal. Klik "+", pilih "Artifact" -> Jeneng Proyek: perang (kita bakal nglumpukake aplikasi dadi file perang). Aplikasi Pisanan Sampeyan Nggunakake Java Servlets - 8Sejatine iku! Ing kaca "Server" sampeyan bisa ndeleng manawa aplikasi sing padha bakal mbukak ing "http://localhost:8080/". Simpen konfigurasi iki lan jeneng iku soko (jeneng config sandi "Tommy"). Sabanjure, ing tab Maven ing IDEA (ing sisih tengen) kita bakal nggunakake plugin perang kanggo mbangun proyek kita dadi file perang (Plugins -> war -> war: war). Aplikasi pisanan sampeyan nggunakake servlet Java - 9Aplikasi pisanan sampeyan nggunakake servlet Java - 10Sukses! Kaca wiwitan wis dibukak. Saiki klik tombol "Mulai nggarap database". index.jsp kaca JSP kita bakal ngasilake panjalukan GET sing bakal diproses dening server. Server bakal ngasilake respon lan bali menyang kita ing wangun dhaptar kabeh pangguna sing wis ana (yen, mesthi, ana ing database). Lan kene padha! Aplikasi pisanan sampeyan nggunakake servlet Java - 12Coba mbusak salah sawijining pangguna: Aplikasi pisanan sampeyan nggunakake servlet Java - 13Iku uga bisa digunakake! Dadi kita nulis aplikasi pisanan nggunakake servlets. Kaya sing sampeyan ngerteni, kabeh ora angel banget :) Minangka peer, sampeyan bisa, umpamane, bali fungsi nggarap mobil saka artikel sadurunge menyang aplikasi. Sing. nggawe kaca servlet lan jsp kapisah kanggo mobil lan mulang aplikasi kita kanggo nampilake dhaptar mobil pangguna, nambah mobil anyar kanggo dheweke, uga ngowahi lan mbusak. PS Servlets lan JSP minangka teknologi sing cukup kuno, lan ing Internet sampeyan bisa nemokake komentar kanthi semangat "sapa sing butuh sampah iki?" Jawaban iki cukup prasaja - iku perlu utamané kanggo wong-wong sing bakal bisa ing proyek nyata, kang bisa uga ana akeh kode ditulis nggunakake. Lan weruh "barang lawas" dadi sing anyar, tanpa ngerti cara kerjane, isih nyenengake :) Kanggo sinau sing luwih jero babagan topik JSP lan servlet, sampeyan bisa nggunakake buku "Head First Servlets and JSP" (ing mung Inggris). Iki ditulis dening penulis sing padha karo buku super misuwur "Head First Java", sing kanggo akeh bisa dadi jaminan kualitas :) Muga-muga artikel iki migunani kanggo para pamaca! Yen sampeyan pengin ndeleng artikel anyar, aja lali kanggo ndhukung penulis ing kompetisi dening "Seneng" wong. Utawa luwih apik - "Aku seneng banget" :) Matur nuwun kanggo kawigatosan, lan sukses ing pasinaon!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION