JavaRush /Java Blog /Random-TK /Java hyzmatlaryny ulanyp ilkinji programmaňyz

Java hyzmatlaryny ulanyp ilkinji programmaňyz

Toparda çap edildi
Hemmäňize salam! Bu makalada, hyzmatçylaryň web ösüşiniň esasy düşünjesi bilen tanyşarsyňyz we olary ulanyp ýönekeý programma ýazyp bilersiňiz. Java hyzmatlaryny ulanyp ilkinji programmaňyz - 1Gereksiz ädimlerden gaça durmak üçin, başdan başlamarys we Gibernate baradaky öňki makalamdan arzamyzyň üstünde işlemegi dowam etdireris . Şeýle-de bolsa, ýaňy serwletler bilen işe başlaýandygymyz sebäpli, Awto synp bilen baglanyşykly ähli zady programmadan aýyrdym we diňe Ulanyjy synpyny we hereketlerini goýdum. Taslamanyň gurluşy şeýle bolar: Java hyzmatlaryny ulanyp ilkinji programmaňyz - 2Diýmek, hyzmatçylar! Wikipediýa: "Serwlet Java interfeýsi bolup, ýerine ýetirilişi serweriň işleýşini giňeldýär. Serwet haýyş-jogap ýörelgesi arkaly müşderiler bilen aragatnaşyk saklaýar." Hakykatdanam şeýle. Bu ýerde ilki bilen “müşderi-serwer amaly arhitekturasy” düşünjesine duş gelýäris. Onuň düýp manysy gaty ýönekeý we bir surata gabat gelýär ( şu ýerden alnan ).
Java Servlets ulanyp ilkinji programmaňyz - 3
Müşderi, HTTP haýyşyny ibermek bilen serwer bilen habarlaşýar. Serwer zerur maglumatlary döredýär (mysal üçin, maglumat bazasyndan alýar) we müşderä gaýtaryp berýär. Iň ýönekeý mysal: belli bir sosial ulgamda “Dostlar” düwmesine basýarsyňyz we şeýlelik bilen serwere haýyş iberersiňiz. Serwer maglumatlar bazasyndaky dostlaryňyzyň sanawyny barlaýar we size (müşderä) gaýtaryp berýär. HTTP haýyşlarynyň sanawy gaty uly, ýöne hiç haçan duş gelmedik bolsaňyz, has gowy düşünmek üçin olar hakda, meselem, şu ýerde okamak has gowudyr . Biziň wezipämiz: servletleri ulanyp CRUD programmasyny döretmek. Programma, HTTP isleglerini gaýtadan işleýän serwlet ulanyp, ulanyjylary maglumat bazasyndan döredip, üýtgedip we pozmagy başarmaly. Gibernate baradaky makaladan biziň programmamyz muny nädip etmelidigini eýýäm bilýärdi, ýöne gönüden-göni Java kodundan, has takygy, esasy () usuldan dolandyrylýar. Bu ýerde haýyşlar müşderi tarapyndan iberiler, ýagny siz :) Ilki bilen etmeli işimiz, pom.xml faýlymyza täze garaşlylyk goşmakdyr.
<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>
3 baglylyk goşduk:
  1. Javax.servlet-api kitaphanasynyň özi;
  2. JSTL bellik kitaphanasy. Müşderi tarapyny, ýagny JSP sahypalaryny döretmek üçin zerur bolar;
  3. Bahar-WebMVC. Bize biraz soňrak gürleşjek bir Bahar synpy gerek bolar.
Servletleriň işleýşi servlet konteýner tarapyndan dolandyrylýar. Biziň ýagdaýymyzda Apache Tomcat ulanarys. Örän meşhur zat, belki-de eýýäm eşiden bolsaňyz gerek :) Serwletiň ömri aşakdaky ädimlerden durýar:
  1. Konteýnerde servlet ýok bolsa.
    • Serwlet synpy konteýner tarapyndan ýüklenýär.
    • Konteýner servlet synpynyň mysalyny döredýär.
    • Konteýner init () usulyny çagyrýar. Bu usul servleti işe girizýär we servlet hyzmat isleglerini ýerine ýetirmezden ozal çagyrylýar. Init () usuly tutuş ömrüniň dowamynda diňe bir gezek atlandyrylýar.
  2. Müşderiniň haýyşyna hyzmat etmek. Her haýyş öz aýratyn sapagynda işlenýär. Konteýner her haýyş üçin hyzmat () usulyny çagyrýar. Bu usul gelýän haýyşyň görnüşini kesgitleýär we haýyşy gaýtadan işlemek üçin bu görnüşe laýyk gelýän usula paýlaýar. Servlet dörediji bu usullar üçin durmuşa geçirmeleri üpjün etmeli. Usul ýerine ýetirilmeýän haýyş kabul edilse, ene synpyň usuly çagyrylýar we adatça haýyşnamaçynyň yzyna gaýtarylmagy bilen gutarýar.
  3. Konteýner servleti pozmaly bolsa, servleti hyzmatdan aýyrýan ýok etmek () usuly diýilýär. Init () usuly ýaly, bu usul tutuş servlet siklinde bir gezek diýilýär.
Hyzmatkärimiz gaty ýönekeý görüner:
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");
    }
}
Görşüňiz ýaly, ýokarda beýan edilen init () usulyny öz içine alýar we dört sany HTTP haýyşyna gabat gelýän 4 usuly ýerine ýetirýär - doGet (), doPost (), doPut () we doDelete (). Olaryň her biri degişlilikde ulanyjylary kabul etmäge, döretmäge, redaktirlemäge we pozmaga mümkinçilik berer. Usullar javax.servlet.http.HttpServletRequest we javax.servlet.http.HttpServletResponse synplarynyň giriş obýekti hökmünde kabul edilýär - ýagny serwere iberilen haýyş we müşderiniň alýan jogaby. Usullaryň içinde “UserService” synpynyň zerur usullary ýerine ýetirilýär, müşderi üçin jogap döredilýär we soňra / ulanyjylaryň salgysyna gönükdirilýär. Mysal üçin, doGet () usulynda ähli ulanyjylaryň sanawyny alýarys. Ondan soň, Http haýyşyna obýektleri goşmaga, şeýle hem belli bir çeşmä gönükdirmäge mümkinçilik berýän “RequestDispatcher” synpynyň obýektini döredýäris (mysal üçin, müşderi JSP sahypasy). DoPut () usulynda (ulanyjy maglumatlaryny täzeläp), HTTP haýyşyny işleýäris, idini, adyny we ýaş parametrlerini çykarýarys, görkezilen ID bilen ulanyjyny tapýarys, özi bilen gelen adyny we ýaşyny belläris haýyş ediň we sahypa / ulanyjylara gaýdyp geliň. Şeýle-de bolsa, bu usullaryň hemmesiniň dogry işlemegi üçin servleti sazlamaly. Munuň üçin WEB-INF bukjasyndaky web.xml faýlyny ulanýarys.
<?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>
Bu faýldaky bellikleriň hemmesi, esasan, içgin, ýöne geliň yzygiderli geçeliň. <welcome-file-list> - başlangyç JSP sahypasy görkezilýär, programma açylanda ilki açylar. Biziň ýagdaýymyzda, bu index.jsp sahypasy. <servlet> - UserSimpleServlet synpymyzy serwlet hökmünde hasaba almak. <servlet-mapping> gaty möhüm bellik. Servlet tarapyndan işlenjek URL-leri kesgitleýär. Biziň ýagdaýymyzda, bularyň hemmesi URL-ler, şonuň üçin diňe "/" görkezýäris. Emma, ​​mysal üçin, ulanyjylar we olaryň maşynlary bilen bir programmamyz bar bolsa, ikinji servlet - SimpleAutoServlet döredip bilerdik. Soňra ulanyjy servletiniň kartasy “/ ulanyjylar” (ýagny ulanyjylary gaýtadan işlemek bilen baglanyşykly haýyşlar), awtoulag hyzmaty üçin bolsa “/ awtos” bolar. Netijede, <filter>. Içinde org.springframework.web.filter.HiddenHttpMethodFilter synpynyň obýektini kesgitleýär. Makala Bahara degişli däl, şonuň üçin bu hakda jikme-jik gürleşmerin. Diňe goşmaça aýratynlyk hökmünde programmamyza birikdirilendigini aýdaýyn. Esasy zat, müşderi tarapyny döretmek üçin JSP sahypalaryny ulanarys. Maglumatlarymyz sahypada ulanyjylaryň sanawy bolan tablisada görkeziler. JSP sahypalarynyň içinde HTML <form /> bellikleri ulanylar. <Form /> -dan maglumat ibermek üçin diňe HTTP GET we POST haýyşlary ulanylyp bilner. Threeagny, üç amalyň hemmesi üçin - ulanyjyny täzelemek, pozmak we döretmek üçin diňe POST haýyşlaryny ulanmaly bolarys. PUT we DELETE haýyşlaryny ulanmak bize elýeterli bolmaz. Aslynda, bu adaty we durmuşa geçirmek aňsat, ýöne HiddenHttpMethodFilter synpy olary ulanmaga mümkinçilik berýär. Bu, programmadaky amallaryň arasyndaky tapawudy okyja has aýdyňlaşdyrar. Ahyrynda, müşderi tarapyna geçeliň. Bäş JSP sahypasy bilen görkezilýär. 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>
JSP sahypasy (Java Serwer Sahypasy) tekstiň iki görnüşini öz içine alýar: tekst formatlarynyň birinde (HTML, SVG, WML ýa-da XML) bolup bilýän statiki çeşme maglumatlary we dinamiki mazmun döredýän JSP elementleri. JSP-iň nämedigine düşünmek üçin, bir awtoryň ( şu ýerden ) gaty gowy makalanyň bir bölegini göçürmäge we goýmaga rugsat bererin . "Aslynda, JSP ilkinji gezek hyzmat edilende serwete öwrülýär we servlet hökmünde işleýär. Düşünmek gaty möhümdir. JSP HTML sahypasy ýaly sahypa däl - täze bir programmistiň muňa aç-açan düşünmegi möhümdir. başga bir hyzmatçy - onuň çykyşyny programmalaşdyrmak hökman däl. Diňe çyzyp bilersiňiz. Maglumatlary gerek ýerlerde çalşyp bilersiňiz. theöne JSP sahypasy iň bolmanda HTML-e meňzeýändigi sebäpli dizaýner üçin has aňsat bolar. Againene-de bir gezek täze başlaýanlara aýdýaryn - JSP HYZMAT . Serwerdäki ähli maglumatlar bilen taýýarlanýar. Ine, ähli maglumatlar şu ýerde goýulýar. Ulanyjy brauzerde taýýar HTML sahypasyny alýar, emma ýok JAVA alamatlary bar. " JSP sahypasynyň hakykatdanam serwetdigini özüňiz görüp bilersiňiz, sebäbi her sahypada ýerine ýetirilmeli usul bar. Mysal üçin, başlangyç sahypa index.jsp "Maglumat bazasy bilen işe başla" düwmesine basanyňyzda = = "get" usulynyň ýerine ýetiriljekdigini aýdýar. Täze ulanyjy döretmek üçin jogapkär bolan addUser.jsp sahypasynda, saklamak düwmesine basanyňyzda usul = "post" ýerine ýetiriler. JSP-iň galanlary adaty statiki HTML belliklerinden durýar, şonuň üçin bu barada jikme-jik durup geçmeris - bu aýratyn makalanyň mowzugy, internetde köp. Şeýlelik bilen, programmamyzy döretdik, galan zat ony hereketde synamak! Munuň üçin ýokarda agzalan Apache Tomcat servlet konteýni gerek bolar. Pişigi resmi web sahypasyndan göçürip alyp bilersiňiz (8-nji wersiýasyny ulanýaryn). Ondan soň, Tomcat arkaly programmamyzy işletmek üçin IDEA-da konfigurasiýa döretmeli. Munuň üçin "Sazlamalary üýtget" goýmasyny açyň, Java Servlets ulanyp ilkinji programmaňyz - 4täze konfigurasiýa dörediň Java Servlets ulanyp ilkinji programmaňyz - 5we Tomcat Server Local saýlaň. Programma serweri goýmasynda, Tomkatyň ýerleşýän bukjasyna barýan ýoly kesgitläň. Java Servlets ulanyp ilkinji programmaňyz - 6Soňra ýerleşdirme goýmasyna geçiň. Ваше первое приложение с использованием Java-сервлетов - 7Bu ýerde programmamyzyň ýerli serwerde ýerleşdirilmegini düzýäris. "+" Basyň, "Artifact" -> Taslamanyňyzyň ady: uruş (programmany söweş faýlyna ýygnarys) saýlaň. Ваше первое приложение с использованием Java-сервлетов - 8Bu esasan! "Serwer" sahypasynda şol bir programmanyň "http: // localhost: 8080 /" -de işleýändigini görüp bilersiňiz. Bu konfigurasiýany ýazdyryň we oňa bir zat dakyň (konfigurasiýa adym "Tommy"). Ondan soň, IDEA-daky Maven goýmasynda (sag tarapda) söweş faýlyna (Plugins -> war -> war: war) uruş plaginini ulanarys. Ваше первое приложение с использованием Java-сервлетов - 9Ваше первое приложение с использованием Java-сервлетов - 10Üstünlik! Başlangyç sahypasy açyldy. Indi “Maglumat bazasy bilen işe başla” düwmesine basyň. JSP sahypamyz index.jsp serwer tarapyndan işlenjek GET haýyşyny döreder. Serwer jogap döreder we bar bolan ulanyjylaryň sanawy görnüşinde (elbetde, maglumatlar bazasynda bolsa) bize gaýtaryp berer. Ine, olar! Ваше первое приложение с использованием Java-сервлетов - 12Ulanyjylaryň birini pozmaga synanyşalyň: Ваше первое приложение с использованием Java-сервлетов - 13Bu hem işleýär! Şeýlelik bilen ilkinji programmamyzy servlet ulanyp ýazdyk. Görşüňiz ýaly, hemme zat beýle bir kyn bolmady :) Öý işi hökmünde, mysal üçin, öňki makaladan awtoulaglar bilen işlemegiň amalyny programma tabşyryp bilersiňiz. Bular. Awtoulaglar üçin aýratyn servlet we jsp sahypalaryny dörediň we ulanyjymyzyň awtoulaglarynyň sanawyny görkezmegi, oňa täze awtoulaglary goşmagy, şeýle hem redaktirlemegi we pozmagy öwrediň. PS Servlets we JSP gaty gadymy tehnologiýalar, internetde köplenç “bu gereksiz kime mätäç?” Ruhy bilen teswir tapyp bilersiňiz. Jogap gaty ýönekeý - bu, ilkinji nobatda, hakyky taslamalaryň üstünde işleýänler tarapyndan zerur, bu kodlary ulanmak bilen ýazylan kodlaryň köp bolmagy mümkin. “Köne zatlary” täze bir zada öwürmek, işleýşine düşünmän henizem hezil :) JSP we servletler mowzugyny has içgin öwrenmek üçin “Head First Servlets and JSP” kitabyny ulanyp bilersiňiz Diňe iňlis dili). Köpler üçin hiliň kepili bolup biljek meşhur super kitap "Head First Java" bilen birmeňzeş ýazyjylar tarapyndan ýazyldy :) Bu makala okyjylar üçin peýdaly bolar diýip umyt edýärin! Täze makalalary görmek isleseňiz, awtory "Halamak" arkaly ýaryşda goldamagy ýatdan çykarmaň. Bettera-da has gowusy - “Gaty haladym” :) Üns bereniňiz üçin sag boluň we okuwyňyzda üstünlik arzuw edýärin!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION