JavaRush /Java Blogu /Random-AZ /Hissə 6: Servlet Konteynerləri

Hissə 6: Servlet Konteynerləri

Qrupda dərc edilmişdir
Bu material “Müəssisələrin İnkişafına Giriş” seriyasının bir hissəsidir. Əvvəlki məqalələr: Hissə 6: Servlet Konteynerləri - 1Keçən məqalədə biz servletlərlə tanış olduq və onların köməyi ilə veb proqramlar yaratmağı öyrəndik. Servlet konteynerləri olmadan bu bayramın mümkün olmayacağını daha yaxından nəzərdən keçirməyin vaxtı gəldi.

Məzmun:

Servlet konteyneri nədir

Bu, serverdə işləyən və yaratdığımız servletlərlə qarşılıqlı əlaqə qura bilən proqramdır. Başqa sözlə desək, əgər biz veb tətbiqimizi serverdə işlətmək istəyiriksə, əvvəlcə servlet konteynerini yerləşdiririk və sonra servletləri orada yerləşdiririk. İşləmə üsulu sadədir: müştəri serverlə əlaqə saxladıqda, konteyner onun sorğusunu emal edir, hansı servletin onu emal etməli olduğunu müəyyənləşdirir və onu ötürür. Hissə 6. Servlet qabları - 2

Servlet konteynerlərindən necə istifadə etmək olar

Marşrutlaşdırma sorğularına əlavə olaraq, servlet konteyneri digər funksiyaları yerinə yetirir:
  1. JSP fayllarından dinamik olaraq HTML səhifələri yaradır.
  2. HTTPS mesajlarını şifrələyir/şifrəsini açır.
  3. Servlet administrasiyası üçün məhdud girişi təmin edir.
Ümumiyyətlə, yaxşı səslənir, qalan şey hamısını necə tətbiq edəcəyinizi anlamaqdır. Yaxşı, bir şeydən istifadə etməyi öyrənmək üçün sizə sadəcə lazımdır... istifadə etməyə cəhd edin :) Beləliklə, bu gün məşq edəcəyik! Ən məşhur servlet konteyneri Apache Tomcat- dır . Açıq mənbədir və istifadəsi pulsuzdur. Əməliyyat sisteminiz üçün Tomcat-ı bu linkdən yükləyin və gəlin konteynerlərlə necə işləyəcəyimizi görək.

Tomcat quraşdırılması və işə salınması

  1. Tomcat-ı quraşdırmaq üçün sadəcə yüklənmiş arxivi istədiyiniz kataloqa çıxarın.

  2. Nəzərə alın ki, Tomcat-ın işləməsi üçün Java 8 və ya daha yüksək versiya tələb olunur. JAVA_HOME mühit dəyişəninin cari jdk versiyasına istinad etdiyinə əmin olun.

  3. Sonra Tomcat-a istifadəçi girişini konfiqurasiya etməlisiniz . Bu, conf qovluğunda yerləşən tomcat-users.xml faylında edilir.

    Tomcat əvvəlcədən dörd rolla təmin edilir:

    • menecer-gui - qrafik interfeysə və status səhifəsinə giriş;
    • menecer-skript - mətn interfeysinə və status səhifəsinə giriş;
    • menecer-jmx - JMX və status səhifəsinə giriş;
    • menecer statusu - yalnız status səhifəsinə giriş.

    <tomcat-users> teqində biz bu rolları açıq şəkildə yazacağıq və onları istifadəçimizə təyin edəcəyik:

    <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"/>

    İndi hər şey işə hazırdır!

  4. Zibil qovluğunda startup.bat faylını işə salın (Linux-da startup.sh).

  5. Bir neçə saniyədən sonra brauzerinizdə http://localhost:8080/ linkini açın . Qrafik meneceri orada görünəcək:

    6-cı hissə: Servlet Konteynerləri - 3

    Əgər belə bir menyu görürsünüzsə, bu Tomcat-ın işlədiyi deməkdir.

  6. Əgər işə yaramırsa, JAVA_HOME və CATALINA_HOME mühit dəyişənlərini əl ilə yoxlayın:

    • JAVA_HOME - Java 8+ proqramının cari versiyasına istinad etməlidir;
    • CATALINA_HOME - Tomcat-a istinad etməli və ya olmamalı (Tomcat-ın başqa versiyasına işarə etməməlidir).

Tomcat-a tətbiqin yerləşdirilməsi

Biz Tomcat-ı işə salmağı bacardıq, ona görə də orada bir növ layihə yerləşdirməyin vaxtı gəldi. Əvvəlki məqalədəki servletlərdən istifadə edək . 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");
   }
}
Yerləşdirmədən əvvəl servletlərimiz müharibə arxivində paketlənməlidir. Bunun üçün adətən Maven istifadə olunur, lakin müharibə arxivi yaratmaq üçün sizə bütün servletlərin xəritələndiyi web.xml faylı lazımdır. Yeni @WebServlet annotasiyasından istifadə edərək servletlər yazdıq, ona görə də bizdə web.xml yoxdur. Xoşbəxtlikdən, IDEA bizim üçün çirkli işləri görə bilər və layihəmizi fərdi olaraq müharibə arxivinə yığa bilər. Bunun üçün siz layihə strukturunu açmalısınız (Ctrl + Shift + Alt + S) -> Artifaktlar -> İstədiyiniz quruluşu seçin -> "Layihə quruluşuna daxil et" yanındakı qutuyu işarələyin -> "OK" düyməsini basın. Hissə 6: Servlet Konteynerləri - 4Ctrl + F9 birləşməsindən istifadə edərək layihə qurun. İndi bizim müharibə arxivimiz hədəf kataloqdadır.Faylı Hissə 6: Servlet Konteynerləri - 5daha sadə bir şeylə - məsələn, servlet.war - adlandırmaq və daha rahat yerə - C:\my\-ə köçürmək olar. Dərman istifadəyə hazır olduqda, onu bir konteynerə qoyun . Bu iki yolla edilə bilər.
  1. GUI vasitəsilə

    Bunu etmək üçün http://localhost:8080/manager/html keçidini izləyin . Tomcat sizdən giriş və parol tələb etməlidir.

    Məndən sonra bütün addımları təkrarladınızsa, o zaman giriş istifadəçidir, parol paroldur .

    Uğurlu avtorizasiyadan sonra Tomcat Veb Tətbiq Meneceri görəcəksiniz. Tətbiqlər bölməsində artıq 5 proqram var - bunlar Tomcat yardım proqramı ilə işləməyi asanlaşdırmaq üçün lazım olan proqramlardır. Gələcəkdə onlar çıxarıla bilər.

    Hissə 6: Servlet Konteynerləri - 6

    Aşağıda Yerləşdirmə bölməsi var. Bundan istifadə edərək, yerləşdirmə üçün müharibə arxivini seçə bilərsiniz. Yol və konteksti əl ilə daxil edək:

    Hissə 6. Servlet qabları - 7

    “Yerləşdirin” düyməsini klikləyin, tətbiqimizin Tətbiqlər bölməsində göründüyünü görürük:

    Hissə 6: Servlet Konteynerləri - 8 Tomcat GUI istifadə edərək, biz onu dayandıra, yenidən başladın, sessiyanın uzunluğunu təyin edə və silə bilərik. Yerləşdirərkən kontekst /demo göstərdik, bu o deməkdir ki, tətbiqimizə http://localhost:8080/demo linki vasitəsilə daxil olmaq lazımdır . Yoxlayın, hər şey işləməlidir.

  2. Fayl sistemi vasitəsilə

    Tətbiqi bu şəkildə yerləşdirmək üçün Tomcat-ın açıldığı kataloqu açmalı və webapps-a keçməlisiniz. Budur bizə tanış olan kommunal proqramlar:

    6-cı hissə: Servlet Konteynerləri - 9

    Bizə lazım olan tək şey servlet.war-ı bura köçürməkdir.

    Bir neçə saniyə gözləyirik, yeni bir servlet qovluğunun göründüyünü görürük, bu da tətbiqimizin yerləşdirildiyini göstərir. Gəlin tanış Tətbiq Meneceri interfeysinə keçək - http://localhost:8080/manager/ . Burada tətbiqimizin /servlet kontekstində yerləşdirildiyini görürük:

    Hissə 6. Servlet qabları - 10

    Bu şəkildə yerləşdirildikdə, kontekst avtomatik olaraq yerləşdirilən müharibə arxivinin adına təyin edilir. Konteksti dəyişdirmək üçün proqramla yeni yaradılmış qovluğun adını dəyişə bilərsiniz, lakin bundan əvvəl faylı silmək lazımdır: əks halda Tomcat proqramı arxivin adı ilə yenidən yerləşdirəcək.

    Gördüyünüz kimi, Tomcat-a proqramların yerləşdirilməsi göründüyündən daha asandır. Lakin onun digər funksiyalarından istifadə etmək asandır. yoxlayaq.

HTTP əvəzinə HTTPS protokolundan istifadə

Xatırlayırsınızsa, ayrı bir məqalədə HTTP və HTTPS arasındakı fərqi müzakirə etdik . HTTPS HTTP ilə eyni protokoldur, lakin ötürülən məlumatların şifrələnməsindən istifadə edir. Müştəri tərəfində şifrələmə brauzer tərəfindən idarə olunur və biz server tərəfində şifrələməni təmin etməliyik. HTTP sorğuları Tomcat tərəfindən qəbul edildiyi və yönləndirildiyi üçün şifrələməni ona həvalə etmək məntiqli olardı. Bunu etmək üçün sizə lazımdır:
  1. Öz-özünə imzalanmış sertifikat yaradın;
  2. Əlavə server parametrləri edin.
Gəlin bunu məşq edək.

Sertifikatın yaradılması

JDK, versiyasından asılı olmayaraq çoxlu sayda kommunal proqramlarla gəlir, onlardan biri keytool . Bu, şifrələmə açarlarını yaratmaq və onlarla işləmək üçün bir vasitədir. Onu istifadə etmək üçün əmr satırından istifadə edərək C:\Program Files\Java\jdk1.8.0_181\bin qovluğuna gedin və keytool -genkey -alias tomcat -keyalg RSA əmrini işlədin .
  • keytool - parametrlərlə yardım proqramını işə salın;
  • -genkey - yeni açar yaratmaq istədiyimizi göstərir;
  • -alias tomcat — açar ləqəbi yaradın;
  • -keyalg RSA - açar yaratma alqoritmi kimi RSA seçin.
Əmri yerinə yetirdikdən sonra yardım proqramı bizimlə dialoqa başlayacaq: Hissə 6: Servlet Konteynerləri - 11Lazımi məlumatları daxil edin. İndi biz ev kataloqumuzda açar anbarı (Windows üçün bu C:\Users\{username}\.keystore) və orada bir tomcat açarı yaratdıq. Biz əksər brauzerlərin qəbul edəcəyi sadə sertifikat yaratdıq. Bu sertifikat kommersiya tətbiqləri üçün uyğun deyil: o, yalnız sınaq məqsədləri üçün istifadə edilə bilər. İstehsal serverində siz sertifikat orqanının sertifikatından istifadə etməlisiniz (məsələn, https://letsencrypt.org/ ).

Serverin qurulması

İndi sertifikat hazırdır, siz server parametrlərini, yəni SSL konnektorunu tənzimləməlisiniz. Bu, apache-tomcat-9.0.30/conf/ daxilində yerləşən server.xml faylında edilir . Bu kimi blokları tapırıq:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
və onların yanında konfiqurasiyamızı yerləşdiririk:
<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 və keystorePass parametrlərinə bizim üçün uyğun olan dəyərləri təyin edirik, shutdown.bat və startup.bat fayllarından istifadə edərək Tomcat-ı yadda saxlayıb yenidən başladın. İndi server https sorğularını emal etməyə hazırdır, bir az dəyişdirilmiş ünvanda - https://localhost:8443/demo/hello . Linkə tıkladığınız zaman sertifikatın şübhəli olması barədə xəbərdarlıq görəcəksiniz ki, bu da təəccüblü deyil. Bir az əvvəl təsvir edildiyi kimi, normal sertifikat əldə etmək üçün sertifikatlaşdırma xidmətlərindən birinin xidmətlərindən istifadə etməlisiniz. Ancaq bu günə qədər məqsədimizə nail olduq: proqram HTTPS protokolundan istifadə edərək işləyir və əsas budur!

HTML səhifələrinin dinamik generasiyası

İndi servlet konteynerlərinin digər xüsusiyyətlərini - HTML səhifələrinin dinamik generasiyasını nəzərdən keçirməyə davam edək. Darıxdırıcı statik HTML kodu əvəzinə dəyişənlər, döngələr, massivlər və digər dil konstruksiyalarından istifadə edərək JAVA kodu yaza biləcəyiniz ideal bir dünya təsəvvür edin. Təsəvvür etdin? Yaxşı xəbər odur ki, oxşar bir şey var, pis xəbər isə tam olaraq mövcud deyil. Əgər təxmin etməmisinizsə, söhbət JSP (Java Server Pages) texnologiyasından gedir. Qısacası, bu, HTML səhifəsinə JAVA kodu hissələrini daxil etməyə imkan verən texnologiyadır. Doğrudur, onda bu kod müştəriyə göndərilməzdən əvvəl hələ də HTML-yə çevrilir, lakin müxtəlif amillər nəzərə alınmaqla dinamik şəkildə yaradılacaq. Məsələn, şərti konstruksiyalardan istifadə edə və hansısa şəraitdən asılı olaraq müxtəlif məzmunlara xidmət edə bilərsiniz. Nümunə JSP səhifəsi:
<%@ 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 haqqında daha ətraflı burada oxuya bilərsiniz . Əslində... biz bunun üçün yox, servlet konteynerləri üçün buradayıq! JSP-nin bununla nə əlaqəsi var? Çox sadədir: JAVA kodunun JSP-dən HTML koduna çevrilməsi servlet konteyneri tərəfindən həyata keçirilir. Servlet JSP məzmununu cavab olaraq qaytarmaq üzrə olduqda, konteyner xəbərdar edir və həmin məzmunu müştəriyə göndərməzdən əvvəl əvvəlcə onu brauzer tərəfindən oxuna bilən HTML səhifəsinə çevirir. Bu gün JSP texnologiyasının bir çox analoqu var - Thymeleaf, FreeMarket, Mustache və s. Onların hamısı oxşar prinsip üzərində işləyir. İş üçün hansını seçmək zövq məsələsidir. Bu həm də servlet konteynerinin seçilməsinə aiddir. Nümunələrdə ən çox yayılmış konteyner olan Tomcat-dan istifadə etdik, lakin bəzi layihələr digərlərindən istifadə edir. Ən populyarları ilə qısaca tanış olmağa və onların Tomcat-dan fərqlərinə baxmağa dəyər.

Tomcat-a alternativlər

  1. GlassFish Oracle tərəfindən dəstəklənən açıq mənbəli konteynerdir.

    Tomcat-dan fərqli olaraq, bu, servletlərdən əlavə JavaEE çərçivəsinin digər komponentlərini də işlədə bilən tam hüquqlu veb serverdir. Eyni zamanda, daha çox RAM istifadə edir. Serveri dəqiq tənzimləyərkən daha çevik olur, bu da istifadəni çətinləşdirir. JavaEE çərçivəsini istifadə edərək proqramlar hazırlayarkən istifadə etməyə dəyər.

  2. WildFly - əvvəllər Jboss . Həmçinin açıq mənbə. Red Hat tərəfindən hazırlanmışdır. Başqa bir şirkət məhsulu - JBoss Enterprise Application Platform ilə çaşqınlığın qarşısını almaq üçün ad dəyişdirildi.

    WildFly, GlassFish kimi, tam hüquqlu veb serverdir. Yeri gəlmişkən, WildFly kapotun altında Tomcat-dan servlet konteyneri kimi istifadə edir. GlassFish-dən fərqli olaraq, WildFly daha yüngüldür və qurmaq daha asandır.

  3. Jetty - əvvəlkilərə bənzər, açıq mənbədir. Eclipse tərəfindən hazırlanmışdır.

    Tomcat kimi, JavaEE çərçivəsinin bütün komponentləri üçün dəstəyi olmayan sadə bir servlet konteyneridir. Eyni zamanda, o, daha yüngüldür və hətta mobil telefonda işlədilə bilər. Tez başlayır və dayanır və yaxşı ölçülür. Tomcat-dan fərqli olaraq, daha kiçik icma və bilik bazasına malikdir.

  4. WebLogic istifadə etməzdən əvvəl satın alınmasını tələb edən lisenziyalı proqramdır. Oracle-a məxsusdur.

    Tomcat ilə müqayisədə onun funksionallığı bir qədər genişdir. Ftp protokolu ilə işləyə bilər. Lakin tətbiqləri inkişaf etdirərkən və sınaqdan keçirərkən o qədər də çevik deyil.

  5. WebSphere (dəqiq desək, WebSphere Tətbiq Serveri) ödənişli proqramdır. IBM tərəfindən hazırlanmışdır. WildFly və GlassFish kimi tam hüquqlu proqram serveridir. Lakin onun daha rahat quraşdırma interfeysi və yüksək əməliyyat etibarlılığı var.

    İşin mənfi tərəfi odur ki, çoxlu resursdan istifadə edir, başlamaq və dayandırmaq üçün çox vaxt tələb olunur ki, bu da kiçik layihələri hazırlayarkən o qədər də əlverişli deyil.

Hansı servlet konteynerini və ya proqram serverini seçmək konkret layihədən asılıdır. Elə layihələr var ki, hətta aşkar kənar adam da özünü ən yüksək keyfiyyətdə sübut edə bilər, lakin əvvəlcə bir şeyi hərtərəfli başa düşmək daha yaxşıdır. Yəqin ki, bunun üçün ideal namizəd Tomcat-dır. Biz onu öyrənmək üçün artıq ilk addımları atmışıq, sonra isə bu, sizdən asılıdır! “Müəssisələrin İnkişafına Giriş” seriyasının yekun məqalələrində MVC nümunəsi ilə tanış olacağıq. Hissə 7. MVC nümunəsinə giriş (Model-View-Controller) Hissə 8. Spring-boot-da kiçik proqramın yazılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION