JavaRush /Java Blog /Random-TK /6-njy bölüm: Servlet gaplary

6-njy bölüm: Servlet gaplary

Toparda çap edildi
Bu material “Kärhananyň ösüşine giriş” seriýasynyň bir bölegidir. Öňki makalalar: 6-njy bölüm: Servlet gaplary - 1Geçen makalada servletler bilen tanyşdyk we olaryň kömegi bilen web programmalaryny nädip döretmelidigini öwrendik. Serwet konteýnerleri bolmazdan, bu dynç alyşyň mümkin bolmajak zatlaryna has içgin göz aýlamagyň wagty geldi.

Mazmuny:

Serwet gap

Bu, serwerde işleýän we döreden hyzmatlarymyz bilen täsirleşip bilýän programma. Başga bir söz bilen aýdylanda, web programmamyzy serwerde işletmek islesek, ilki bilen hyzmat ediş konteýnerini ýerleşdirýäris, soň bolsa hyzmat ediş enjamlaryny ýerleşdirýäris. Işleýiş usuly ýönekeý: müşderi serwer bilen habarlaşanda, konteýner haýyşyny gaýtadan işleýär, haýsy hyzmatçynyň işlemelidigini kesgitleýär we geçirýär. Bölüm 6. Hyzmat ediş gaplary - 2

Serwet gaplaryny nädip ulanmaly

Marşrutlaşdyryş haýyşlaryndan başga-da, servlet konteýner beýleki funksiýalary ýerine ýetirýär:
  1. JSP faýllaryndan HTML sahypalaryny dinamiki döredýär.
  2. HTTPS habarlaryny şifrleýär / açýar.
  3. Serwlet dolandyryşy üçin çäklendirilen girişi üpjün edýär.
Umuman aýdanyňda, bu gaty gowy görünýär, galan zatlary hemmesini nädip ulanmalydygyny anyklamak. Bolýar, bir zady nädip ulanmalydygyny öwrenmek üçin diňe size gerek ... ulanmaga synanyşyň :) Şonuň üçin bu gün amal ederis! Iň meşhur servlet konteýni Apache Tomcat . Açyk çeşme we ulanmaga mugt. Operasiýa ulgamyňyz üçin “Tomcat” -y şu baglanyşykdan göçürip alyň , geliň, konteýnerler bilen nähili işlemelidigini göreliň.

Tomcat gurmak we işletmek

  1. “Tomcat” -y gurmak üçin göçürilen arhiwi gerekli bukja açyň.

  2. Tomcat-yň işlemek üçin Java 8 ýa-da has ýokary wersiýasyny talap edýändigini ýadyňyzdan çykarmaň. JAVA_HOME gurşaw üýtgeýjisiniň häzirki jdk wersiýasyna degişlidigine göz ýetiriň.

  3. Ondan soň , Tomcat-a ulanyjynyň girişini sazlamaly . Bu, bukjada ýerleşýän tomcat-users.xml faýlynda edilýär.

    Tomcat öňünden dört rol bilen üpjün edilýär:

    • manager-gui - grafiki interfeýs we ýagdaý sahypasyna girmek;
    • dolandyryjy-skript - tekst interfeýsine we ýagdaý sahypasyna girmek;
    • manager-jmx - JMX we status sahypasyna girmek;
    • dolandyryjy-status - diňe status sahypasyna girmek.

    <tomcat-users> belliginiň içinde bu rollary aç-açan ýazarys we ulanyjymyza belläris:

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="user" password="password"
        roles="manager-gui, manager-script, manager-jmx, manager-status"/>

    Indi hemme zat başlamaga taýyn!

  4. Bin bukjasynda startup.bat faýlyny işlediň (Linux-da startup.sh).

  5. Birnäçe sekuntdan soň brauzeriňizde http: // localhost: 8080 / baglanyşygyny açyň . Grafiki menejer şol ýerde peýda bolar:

    6-njy bölüm: Servlet gaplary - 3

    Şeýle menýuny görseňiz, Tomkatyň işleýändigini aňladýar.

  6. Işlemeýän bolsa, JAVA_HOME we CATALINA_HOME gurşaw üýtgeýjilerini el bilen barlaň:

    • JAVA_HOME - Java 8+-iň häzirki wersiýasyna salgylanmalydyr;
    • CATALINA_HOME - Tomkata ýüzlenmeli ýa-da ýok bolmaly (Tomkatyň başga bir wersiýasyny görkezmeli däl).

Tomcat-a anketany ýerleşdirmek

Tomkaty işe girizmegi başardyk, şonuň üçin oňa haýsydyr bir taslama ýerleşdirmegiň wagty geldi. Öňki makaladaky hyzmatkärleri ulanalyň . MainServlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "
"
); } else { printWriter.write("Hello, " + username + "
"
); } printWriter.write("Page was visited " + visitCounter + " times."); printWriter.close(); } }
IndexServlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}
Gurnamazdan ozal, hyzmatkärlerimiz söweş arhiwinde gaplanmalydyr. Adatça Maven munuň üçin ulanylýar, ýöne uruş arhiwini döretmek üçin ähli hyzmatçylaryň kartalaşdyrylan web.xml faýly gerek. Täze @WebServlet düşündirişini ulanyp, servlet ýazdyk, şonuň üçin web.xml ýok. Bagtymyza, IDEA biziň üçin hapa işleri edip biler we taslamamyzy aýratynlykda uruş arhiwine salyp biler. Munuň üçin taslama gurluşyny açmaly (Ctrl + Shift + Alt + S) -> Artefaktlar -> Islenýän gurluşy saýlaň -> "Taslama gurluşyna goşuň" -yň gapdalyndaky gutujygyny belläň -> "OK" düwmesine basyň. 6-njy bölüm: Servlet gaplary - 4Ctrl + F9 kombinasiýasyny ulanyp taslama guruň. Indi söweş arhiwimiz maksatly katalogda. 6-njy bölüm: Servlet gaplary - 5Faýlyň has ýönekeý bir zady üýtgedip bolar - mysal üçin servlet.war - we has amatly ýere - C: \ my \. Piwo ulanmaga taýyn bolanda, ony bir gapda goýuň . Bu iki ýol bilen edilip bilner.
  1. GUI arkaly

    Munuň üçin http: // localhost: 8080 / manager / html baglanyşygyna eýeriň . Tomcat, giriş we parol soramagyňyzy haýyş edýär.

    Menden soň ähli ädimleri gaýtalasaň, giriş ulanyjy, parol parol .

    Üstünlikli ygtyýarnamadan soň Tomcat Web Programma Dolandyryjysyny görersiňiz. Programmalar bölüminde eýýäm 5 programma bar - bular bilen işlemegi ýönekeýleşdirmek üçin zerur Tomcat peýdaly programmalar. Geljekde aýrylyp bilner.

    6-njy bölüm: Servlet gaplary - 6

    Aşakda ýerleşdirmek bölümi. Ony ulanyp, ýerleşdirmek üçin söweş arhiwini saýlap bilersiňiz. Theol we kontekst bilen el bilen gireliň:

    Bölüm 6. Hyzmat ediş gaplary - 7

    “Gurnamak” düwmesine basyň, programmamyzyň Programmalar bölüminde peýda bolandygyny görýäris:

    6-njy bölüm: Servlet gaplary - 8 Tomcat GUI ulanyp, ony duruzyp, täzeden açyp bileris, sessiýanyň uzynlygyny kesgitläp we pozup bileris. Iberilende, programmamyza http: // localhost: 8080 / demo baglanyşygy arkaly girmelidigini aňladýan kontekst / demo kesgitledik . Barlaň, hemme zat işlemeli.

  2. Faýl ulgamy arkaly

    Bu görnüşde bir programma ýerleşdirmek üçin, Tomkatyň açylmadyk katalogyny açmaly we web sahypalaryna girmeli. Ine, biziň bilýän peýdaly programmalarymyz:

    Bölüm 6. Hyzmat ediş gaplary - 9

    Biziň etmeli zadymyz, servlet.war-ymyzy şu ýere göçürmek.

    Birnäçe sekunt garaşýarys, täze hyzmat bukjasynyň peýda bolandygyny görýäris, bu bolsa programmamyzyň ýerleşdirilendigini aňladýar. Tanyş Programma Dolandyryjy interfeýsine geçeliň - http: // localhost: 8080 / manager / . Bu ýerde, programmamyzyň / servlet kontekstinde ýerleşdirilendigini görýäris:

    6-njy bölüm: Servlet gaplary - 10

    Şeýle usul bilen ýerleşdirilende, kontekst awtomatiki usulda ýerleşdirilen söweş arhiwiniň adyna berilýär. Konteksti üýtgetmek üçin täze döredilen bukjanyň adyny programma bilen üýtgedip bilersiňiz, ýöne ondan ozal faýly pozmaly: ýogsam Tomcat programmany arhiwiň ady bilen täzeden ýerleşdirer.

    Görşüňiz ýaly, Tomcat-a programmalary ýerleşdirmek, görünişinden has aňsat. Emma beýleki funksiýalaryny ulanmak aňsat. Barlap göreliň.

HTTP ýerine protokol ulanmak

.Adyňyzda bolsa, HTTP bilen HTTPS arasyndaky tapawudy aýratyn makalada ara alyp maslahatlaşdyk . HTTPS, HTTP bilen birmeňzeş protokol, ýöne geçirilýän maglumatlaryň şifrlenmegini ulanýar. Müşderi tarapynda şifrlemek brauzer tarapyndan dolandyrylýar we serwer tarapynda şifrlemäni üpjün etmeli. HTTP haýyşlary Tomcat tarapyndan kabul edilip, ugrukdyrylandygy sebäpli, şifrlemäni bermek mantykly bolar. Munuň üçin size zerur:
  1. Öz-özüňe gol çekilen şahadatnama döretmek;
  2. Goşmaça serwer sazlamalaryny düzüň.
Geliň muny ýerine ýetireliň.

Şahadatnama döretmek

JDK wersiýa garamazdan, köp sanly kömekçi enjamlar bilen gelýär, olaryň biri düwme düwmesi . Bu şifrlemek düwmelerini döretmek we olar bilen işlemek üçin gural. Ony ulanmak üçin buýruk setirini ulanyp, C: \ Program Files \ Java \ jdk1.8.0_181 \ bin katalogyna giriň we buýruk düwmesini -genkey -alias tomcat -keyalg RSA işlediň .
  • düwme - parametrleri bilen kömekçi enjamy işe girizmek;
  • -genkey - täze açar döretmek isleýändigimizi görkezýär;
  • -alias tomcat - esasy lakam döretmek;
  • -keyalg RSA - esasy nesil algoritmi hökmünde RSA-ny saýlaň.
Buýrugy ýerine ýetirenimizden soň, peýdaly enjam biziň bilen gepleşik başlar: 6-njy bölüm: Servlet konteýnerleri - 11Gerekli maglumatlary giriziň. Indi öý katalogymyzda açar dükany döretdik (Windows üçin bu C: \ Ulanyjylar \ {ulanyjy ady} \. Dükan) we içindäki tomkat açary. Brauzerleriň köpüsiniň kabul etjek ýönekeý şahadatnamasyny döretdik. Bu şahadatnama täjirçilik programmalary üçin amatly däl: ony diňe synag maksatly ulanyp bolýar. Önümçilik serwerinde şahadatnama edarasynyň şahadatnamasyny ulanmaly (mysal üçin, https://letsencrypt.org/ ).

Serweri gurmak

Şahadatnama taýýar bolansoň, serwer sazlamalaryny, ýagny SSL birleşdirijisini sazlamaly. Bu, apache-tomcat-9.0.30 / conf / -de ýerleşýän server.xml faýlynda edilýär . Munuň ýaly bloklary tapýarys:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
we olaryň gapdalynda konfigurasiýamyzy ýerleşdirýäris:
<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="C:\Users\user\.keystore" keystorePass="mypass"
       clientAuth="false" sslProtocol="TLS"/>
“KeystoreFile” we “keystorePass” parametrlerini bize degişli bahalary belleýäris, “shutdown.bat” we “startup.bat” faýllaryny ulanyp, Tomkaty ýatda saklaň we täzeden açyň. Indi serwer https haýyşlaryny gaýtadan işlemäge taýyn, üýtgedilen adrese azajyk - https: // localhost: 8443 / demo / salam . Baglanyşyga basanyňyzda, şahadatnamanyň şübheli boljakdygy barada duýduryş görersiňiz, bu geň däldir. Biraz öň düşündirilişi ýaly, adaty şahadatnama almak üçin sertifikat hyzmatlarynyň biriniň hyzmatlaryndan peýdalanmaly. Emma şu wagta çenli maksadymyza ýetdik: programma HTTPS protokolyny ulanyp işleýär we bu esasy zat!

HTML sahypalarynyň dinamiki nesli

Indi serwet konteýnerleriniň beýleki aýratynlyklaryna - HTML sahypalarynyň dinamiki nesline syn bermegi dowam etdireliň. Statik HTML kody içgysgynç ýerine, üýtgeýänleri, aýlawlary, massiwleri we beýleki dil gurluşlaryny ulanyp, JAVA koduny ýazyp boljak ideal dünýäni göz öňüne getiriň. Göz öňüne getirdiňizmi? Gowy habar, şuňa meňzeş bir zadyň barlygy, erbet habar bolsa düýbünden ýoklugy. Eger çaklamadyk bolsaňyz, JSP (Java Server Pages) tehnologiýasy hakda gürleşýäris. Gysgaça aýdylanda, bu size JAVA kodunyň böleklerini HTML sahypasyna salmaga mümkinçilik berýän tehnologiýa. Dogry, onda bu kod müşderä iberilmezden ozal HTML-e öwrülýär, ýöne dürli faktorlary göz öňünde tutup dinamiki dörediler. Mysal üçin, şertli gurluşlary ulanyp, käbir şertlere baglylykda dürli mazmuna hyzmat edip bilersiňiz. Mysal JSP sahypasy:
<%@ page language="java"" %>
<html>
<head>
<title>JSP</title>
</head>

<body>
<%
String firstName="name";
String secondName="surname";

    if(firstName.equals("name")){
      out.print("Hello :"+firstName+"<br>");
    }

    if(firstName.equals("name") && secondName.equals("surname"))
    {
      out.print("Hello, my dear friend! <br>");
    }
    else
    {
      out.print("I don’t know you. Go away! <br>");
    }
%>
</body>
</html>
JSP hakda has giňişleýin maglumaty şu ýerden okap bilersiňiz . Aslynda ... biz munuň üçin däl, hyzmat ediş gaplary üçin! JSP bilen näme baglanyşygy bar? Bu ýönekeý: JAVA koduny JSP-den HTML kodyna öwürmek servlet konteýner tarapyndan amala aşyrylýar. Serwlet JSP mazmunyny jogap hökmünde yzyna gaýtarjak bolanda, konteýner üns berýär we şol mazmuny müşderä ibermezden ozal ony brauzerde okalýan HTML sahypasyna öwürýär. Häzirki wagtda JSP tehnologiýasynyň köp meňzeşleri bar - Thymeleaf, FreeMarket, Mustache we başgalar. Olaryň hemmesi meňzeş prinsipde işleýärler. Iş üçin haýsysyny saýlamaly, tagam meselesi. Bu, hyzmat ediş gapyny saýlamaga hem degişlidir. Mysallarda iň köp ýaýran konteýner Tomkaty ulanýardyk, ýöne käbir taslamalarda beýlekiler ulanylýar. Iň meşhurlary bilen gysgaça tanyşmaga we Tomkatdan tapawudyna göz aýlamaly.

Tomcat üçin alternatiwalar

  1. GlassFish , Oracle tarapyndan goldanýan açyk çeşme gap.

    Tomkatdan tapawutlylykda, hyzmatlardan başga-da, JavaEE çarçuwasyndaky beýleki komponentleri işledip bilýän doly hukukly web serweri. Şol bir wagtyň özünde has köp RAM ulanýar. Serweri gowy düzeniňizde has çeýe, bu bolsa ulanmagy has kynlaşdyrýar. JavaEE çarçuwasyny ulanyp, programmalar düzülende ulanmaga mynasyp.

  2. WildFly - öňki Jboss . Şeýle hem açyk çeşme. Red Hat tarapyndan işlenip düzüldi. Başga bir kompaniýa önümi - JBoss Enterprise Programma Platformasy bilen bulaşmazlyk üçin ady üýtgedildi.

    “WildFly”, “GlassFish” ýaly, doly hukukly serwerdir. Wayeri gelende aýtsak, “WildFly” kapotyň aşagynda Tomkaty hyzmat ediş gapy hökmünde ulanýar. “GlassFish” -den tapawutlylykda “WildFly” has ýeňil we gurmak has aňsat.

  3. Jetty - öňkülerine meňzeş, açyk çeşme. “Eclipse” tarapyndan işlenip düzüldi.

    Tomcat ýaly, JavaEE çarçuwasynyň ähli böleklerine goldaw bolmazdan, ýönekeý serwet konteýner. Şol bir wagtyň özünde has ýeňil we hatda jübi telefonynda hem işledip bolýar. Çalt başlaýar we saklanýar we gowy terezini alýar. Tomkatdan tapawutlylykda, has kiçi jemgyýet we bilim bazasy bar.

  4. WebLogic , ulanmazdan ozal satyn almagy talap edýän ygtyýarly programma üpjünçiligi. “Oracle” -yň eýeçiligi.

    Tomkat bilen deňeşdirilende, onuň işleýşi birneme giňdir. Ftp protokoly bilen işläp biler. Emma programmalary işläp düzmekde we synagdan geçirmekde beýle çeýe däl.

  5. WebSphere (has takygy WebSphere Programma Serweri) tölegli programma üpjünçiligi. IBM tarapyndan işlenip düzüldi. “WildFly” we “GlassFish” ýaly, bu doly hukukly programma serweri. Itöne has amatly gurnama interfeýsi we ýokary amaly ygtybarlylygy bar.

    Zyýanly tarapy, köp serişdäni ulanýar, başlamak we durmak üçin köp wagt alýar, bu kiçi taslamalary işläp düzmekde gaty amatly däl.

Haýsy servlet konteýnerini ýa-da amaly serweri saýlamaly, belli bir taslama bagly. Taslamalar bar, hatda aç-açan bir adam hem özüni iň ýokary hilli subut edip biler, ýöne ilki bilen bir zada doly düşünmek has gowudyr. Munuň üçin iň gowy kandidat Tomkat bolsa gerek. Öwrenmekde ilkinji ädimleri ädipdik, soň bolsa size bagly! “Kärhananyň ösüşine giriş” seriýasynyň soňky makalalarynda MVC nagşy bilen tanyşarys. Bölüm 7. MVC nagşy bilen tanyşlyk (Model-View-Controller) 8-nji bölüm. Bahar paslynda kiçi programma ýazmak
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION