JavaRush /Java blogi /Random-UZ /6-qism: Servlet konteynerlari

6-qism: Servlet konteynerlari

Guruhda nashr etilgan
Ushbu material "Korxonani rivojlantirishga kirish" seriyasining bir qismidir. Oldingi maqolalar: 6-qism: Servlet konteynerlari - 1Oxirgi maqolada biz servletlar bilan tanishdik va ular yordamida veb-ilovalar yaratishni o'rgandik. Bu bayramni nimalarsiz o'tkazib bo'lmasdi - servlet konteynerlari haqida batafsilroq ko'rib chiqish vaqti keldi.

Tarkib:

Servlet konteyneri nima

Bu serverda ishlaydigan dastur va biz yaratgan servletlar bilan o'zaro aloqada bo'lishi mumkin. Boshqacha qilib aytganda, agar biz veb-ilovamizni serverda ishga tushirmoqchi bo'lsak, avval servlet konteynerini joylashtiramiz va keyin unga servletlarni joylashtiramiz. Uning ishlash usuli oddiy: mijoz serverga murojaat qilganda, konteyner uning so‘rovini qayta ishlaydi, qaysi servlet uni qayta ishlash kerakligini aniqlaydi va uni uzatadi. 6-qism. Servlet idishlari - 2

Servlet konteynerlaridan qanday foydalanish kerak

Marshrutlash so'rovlariga qo'shimcha ravishda, servlet konteyneri boshqa funktsiyalarni bajaradi:
  1. JSP fayllaridan HTML sahifalarini dinamik ravishda yaratadi.
  2. HTTPS xabarlarini shifrlaydi/shifrini hal qiladi.
  3. Servlet ma'muriyati uchun cheklangan kirishni ta'minlaydi.
Umuman olganda, bu yaxshi eshitiladi, qolgan hamma narsani qanday qo'llashni aniqlash. Xo'sh, biror narsadan foydalanishni o'rganish uchun sizga shunchaki kerak ... undan foydalanishga harakat qiling :) Demak, bugun biz mashq qilamiz! Eng mashhur servlet konteyneri Apache Tomcat hisoblanadi . Bu ochiq manba va foydalanish uchun bepul. Ushbu havoladan operatsion tizimingiz uchun Tomcat dasturini yuklab oling va konteynerlar bilan qanday ishlashni ko'rib chiqaylik.

Tomcat-ni o'rnatish va ishga tushirish

  1. Tomcat-ni o'rnatish uchun yuklab olingan arxivni kerakli katalogga oching.

  2. Iltimos, Tomcat-ni ishga tushirish uchun Java 8 yoki undan yuqori versiyasi talab qilinishini unutmang. JAVA_HOME muhit o'zgaruvchisi joriy jdk versiyasiga tegishli ekanligiga ishonch hosil qiling.

  3. Keyinchalik Tomcat-ga foydalanuvchi kirishini sozlashingiz kerak . Bu conf papkasida joylashgan tomcat-users.xml faylida amalga oshiriladi.

    Tomcat oldindan to'rtta rol bilan ta'minlangan:

    • menejer-gui - grafik interfeys va holat sahifasiga kirish;
    • menejer-skript - matn interfeysi va holat sahifasiga kirish;
    • menejer-jmx - JMX va holat sahifasiga kirish;
    • menejer-status - faqat holat sahifasiga kirish.

    <tomcat-users> tegi ichida biz ushbu rollarni aniq yozamiz va ularni foydalanuvchimizga tayinlaymiz:

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

    Endi hamma narsa ishga tushirishga tayyor!

  4. Bino papkasida startup.bat faylini ishga tushiring (Linux da startup.sh).

  5. Bir necha soniyadan so'ng brauzeringizda http://localhost:8080/ havolasini oching . U erda grafik menejer paydo bo'ladi:

    6-qism: Servlet konteynerlari - 3

    Agar siz bunday menyuni ko'rsangiz, bu Tomcat ishlayotganligini anglatadi.

  6. Agar u ishlamasa, JAVA_HOME va CATALINA_HOME muhit o'zgaruvchilarini qo'lda tekshiring:

    • JAVA_HOME - Java 8+ ning joriy versiyasiga murojaat qilishi kerak;
    • CATALINA_HOME - Tomcat-ga murojaat qilishi yoki yo'qligi kerak (Tomcat-ning boshqa versiyasiga ishora qilmasligi kerak).

Tomcat-ga ilovani o'rnatish

Biz Tomcat-ni ishga tushirishga muvaffaq bo'ldik, shuning uchun unda qandaydir loyihani qo'llash vaqti keldi. Oldingi maqoladagi servletlardan foydalanamiz . 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");
   }
}
Joylashtirishdan oldin bizning servletlarimiz urush arxiviga joylashtirilishi kerak. Buning uchun odatda Maven ishlatiladi, lekin urush arxivini yaratish uchun sizga barcha servletlar xaritalangan web.xml fayli kerak bo'ladi. Biz yangi @WebServlet izohidan foydalanib servletlar yozdik, shuning uchun bizda web.xml yo'q. Yaxshiyamki, IDEA biz uchun iflos ishlarni bajarishi va loyihamizni urush arxiviga alohida o'rashi mumkin. Buning uchun siz loyiha strukturasini ochishingiz kerak (Ctrl + Shift + Alt + S) -> Artifaktlar -> Kerakli tuzilmani tanlang -> “Loyiha tuzilishiga kiritish” yonidagi katakchani belgilang -> “OK” tugmasini bosing. 6-qism: Servlet konteynerlari - 4Ctrl + F9 kombinatsiyasidan foydalanib loyihani yarating. Endi bizning urush arxivimiz maqsadli katalogda.Faylni 6-qism: Servlet konteynerlari - 5oddiyroq narsaga o'zgartirish mumkin - masalan, servlet.war - va qulayroq joyga ko'chirish - C:\my\. Pivo ishlatishga tayyor bo'lgach, uni idishga joylashtiring . Bu ikki usulda amalga oshirilishi mumkin.
  1. GUI orqali

    Buning uchun http://localhost:8080/manager/html havolasiga o'ting . Tomcat sizdan login va parolni so'rashi kerak.

    Agar siz mendan keyin barcha amallarni takrorlagan bo'lsangiz, unda login foydalanuvchi, parol parol .

    Muvaffaqiyatli avtorizatsiyadan so'ng siz Tomcat Web Application Manager-ni ko'rasiz. Ilovalar bo'limi allaqachon 5 ta ilovani o'z ichiga oladi - bu Tomcat utility dasturlari, u bilan ishlashni soddalashtirish uchun zarur. Ular kelajakda olib tashlanishi mumkin.

    6-qism: Servlet konteynerlari - 6

    Quyida Deploy bo'limi mavjud. Undan foydalanib, siz joylashtirish uchun urush arxivini tanlashingiz mumkin. Keling, yo'l va kontekstni qo'lda kiritamiz:

    6-qism. Servlet idishlari - 7

    "O'rnatish" tugmasini bosing, biz ilovamiz Ilovalar bo'limida paydo bo'lganini ko'ramiz:

    6-qism: Servlet konteynerlari - 8 Tomcat GUI-dan foydalanib, biz uni to'xtatishimiz, qayta ishga tushirishimiz, sessiya uzunligini belgilashimiz va o'chirishimiz mumkin. Joylashtirishda biz /demo kontekstini ko'rsatdik, bu bizning ilovamizga http://localhost:8080/demo havolasi orqali kirish kerakligini anglatadi . Tekshiring, hamma narsa ishlashi kerak.

  2. Fayl tizimi orqali

    Ilovani shu tarzda joylashtirish uchun siz Tomcat arxivi ochilgan katalogni ochishingiz va veb-ilovalarga o'tishingiz kerak. Bizga tanish bo'lgan foydali dasturlar:

    6-qism. Servlet idishlari - 9

    Biz qilishimiz kerak bo'lgan narsa bizning servlet.war-ni bu erga ko'chirishdir.

    Biz bir necha soniya kutamiz, biz yangi servlet papkasi paydo bo'lganini ko'ramiz, bu bizning ilovamiz joylashtirilganligini anglatadi. Keling, tanish dastur menejeri interfeysiga o'tamiz - http://localhost:8080/manager/ . Bu erda biz ilovamiz /servlet kontekstida joylashtirilganligini ko'ramiz:

    6-qism: Servlet konteynerlari - 10

    Shu tarzda joylashtirilganda, kontekst avtomatik ravishda joylashtirilgan urush arxivi nomiga tayinlanadi. Kontekstni o'zgartirish uchun siz ilova bilan yangi yaratilgan jildning nomini o'zgartirishingiz mumkin, lekin undan oldin faylni o'chirishingiz kerak: aks holda Tomcat arxiv nomi bilan ilovani qayta joylashtiradi.

    Ko'rib turganingizdek, Tomcat-ga ilovalarni joylashtirish tuyulishi mumkin bo'lgandan ancha oson. Ammo uning boshqa funktsiyalaridan foydalanish oson. Keling, tekshiramiz.

HTTP o'rniga HTTPS protokolidan foydalanish

Esingizda bo'lsa, biz HTTP va HTTPS o'rtasidagi farqni alohida maqolada muhokama qildik . HTTPS HTTP bilan bir xil protokol, lekin uzatiladigan ma'lumotlarni shifrlashdan foydalanadi. Mijoz tomonida shifrlash brauzer tomonidan amalga oshiriladi va biz server tomonida shifrlashni ta'minlashimiz kerak. HTTP so'rovlari Tomcat tomonidan qabul qilingan va yo'naltirilganligi sababli, shifrlashni unga topshirish mantiqan to'g'ri keladi. Buning uchun sizga kerak:
  1. O'z-o'zidan imzolangan sertifikat yaratish;
  2. Qo'shimcha server sozlamalarini o'rnating.
Keling, buni mashq qilaylik.

Sertifikat yaratish

JDK versiyasidan qat'i nazar, ko'p sonli yordamchi dasturlar bilan birga keladi, ulardan biri keytool . Bu shifrlash kalitlarini yaratish va ular bilan ishlash uchun vositadir. Uni ishlatish uchun buyruq qatoridan foydalanib, C:\Program Files\Java\jdk1.8.0_181\bin katalogiga o'ting va keytool -genkey -alias tomcat -keyalg RSA buyrug'ini bajaring .
  • keytool - yordamchi dasturni parametrlar bilan ishga tushirish;
  • -genkey - biz yangi kalit yaratmoqchi ekanligimizni bildiradi;
  • -taxallus tomcat — kalit taxallus yaratish;
  • -keyalg RSA - kalit yaratish algoritmi sifatida RSA ni tanlang.
Buyruqni bajargandan so'ng, yordamchi dastur biz bilan muloqotni boshlaydi: 6-qism: Servlet konteynerlari - 11Kerakli ma'lumotlarni kiriting. Endi biz uy katalogimizda kalit do'konini yaratdik (Windows uchun bu C:\Users\{username}\.keystore) va undagi tomcat kaliti. Biz ko'pchilik brauzerlar qabul qiladigan oddiy sertifikat yaratdik. Ushbu sertifikat tijorat ilovalari uchun mos emas: u faqat sinov maqsadlarida ishlatilishi mumkin. Ishlab chiqarish serverida siz sertifikat organining sertifikatidan foydalanishingiz kerak (masalan, https://letsencrypt.org/ ).

Serverni sozlash

Endi sertifikat tayyor, siz server sozlamalarini, ya'ni SSL ulagichini sozlashingiz kerak. Bu apache-tomcat-9.0.30/conf/ da joylashgan server.xml faylida amalga oshiriladi . Biz bloklarni topamiz:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
va ularning yonida biz konfiguratsiyamizni joylashtiramiz:
<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"/>
Biz keystoreFile va keystorePass parametrlariga biz uchun mos bo'lgan qiymatlarni belgilaymiz, shutdown.bat va startup.bat fayllari yordamida Tomcat-ni saqlang va qayta ishga tushiramiz. Endi server https so'rovlarini qayta ishlashga tayyor, biroz o'zgartirilgan manzilda - https://localhost:8443/demo/hello . Havolani bosganingizda, sertifikat shubhali ekanligi haqida ogohlantirishni ko'rasiz, bu ajablanarli emas. Bir oz oldinroq ta'riflanganidek, oddiy sertifikat olish uchun siz sertifikatlash xizmatlaridan birining xizmatlaridan foydalanishingiz kerak. Ammo hozircha biz maqsadimizga erishdik: dastur HTTPS protokoli yordamida ishlaydi va bu asosiy narsa!

HTML sahifalarini dinamik yaratish

Endi servlet konteynerlarining boshqa xususiyatlarini ko'rib chiqishni davom ettiramiz - HTML sahifalarini dinamik yaratish. Zerikarli statik HTML kod o‘rniga o‘zgaruvchilar, tsikllar, massivlar va boshqa til konstruksiyalari yordamida JAVA kodini yozishingiz mumkin bo‘lgan ideal dunyoni tasavvur qiling. Tasavvur qildingizmi? Yaxshi xabar shundaki, shunga o'xshash narsa bor, yomon xabar shundaki, u to'liq mavjud emas. Agar siz taxmin qilmagan bo'lsangiz, biz JSP (Java Server Pages) texnologiyasi haqida gapiramiz. Xulosa qilib aytganda, bu HTML sahifasiga JAVA kod qismlarini kiritish imkonini beruvchi texnologiya. To'g'ri, mijozga yuborishdan oldin bu kod hali ham HTMLga aylantiriladi, ammo u turli omillarni hisobga olgan holda dinamik ravishda yaratiladi. Misol uchun, siz shartli konstruktsiyalardan foydalanishingiz va ba'zi shartlarga qarab turli xil tarkibga xizmat qilishingiz mumkin. Misol JSP sahifasi:
<%@ 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>
Bu yerda JSP haqida ko'proq o'qishingiz mumkin . Aslida... biz buning uchun emas, balki servlet konteynerlari uchun kelganmiz! JSP ning bunga nima aloqasi bor? Hammasi oddiy: JAVA kodini JSP dan HTML kodga aylantirish servlet konteyneri tomonidan amalga oshiriladi. Servlet JSP tarkibini javob sifatida qaytarmoqchi bo'lsa, konteyner xabar oladi va mijozga kontentni yuborishdan oldin uni brauzer tomonidan o'qiladigan HTML sahifasiga aylantiradi. Bugungi kunda JSP texnologiyasining ko'plab analoglari mavjud - Thymeleaf, FreeMarket, Mustache va boshqalar. Ularning barchasi bir xil printsip asosida ishlaydi. Ish uchun qaysi birini tanlash ta'mga bog'liq. Bu servlet konteynerini tanlashga ham tegishli. Misollarda biz Tomcat-dan foydalandik - eng keng tarqalgan konteyner, lekin ba'zi loyihalar boshqalardan foydalanadi. Eng mashhurlari bilan qisqacha tanishib, ularning Tomcat-dan farqlarini ko'rib chiqishga arziydi.

Tomcat uchun muqobillar

  1. GlassFish - Oracle tomonidan qo'llab-quvvatlanadigan ochiq kodli konteyner.

    Tomcat-dan farqli o'laroq, bu to'liq huquqli veb-server bo'lib, u servletlardan tashqari JavaEE ramkasining boshqa komponentlarini ham boshqarishi mumkin. Shu bilan birga, u ko'proq operativ xotirani ishlatadi. Serverni nozik sozlashda yanada moslashuvchan, bu esa undan foydalanishni qiyinlashtiradi. JavaEE ramkasidan foydalangan holda ilovalarni ishlab chiqishda foydalanishga arziydi.

  2. WildFly - ilgari Jboss . Shuningdek, ochiq manba. Red Hat tomonidan ishlab chiqilgan. Boshqa kompaniya mahsuloti - JBoss Enterprise Application Platform bilan chalkashmaslik uchun nom o'zgartirildi.

    WildFly, xuddi GlassFish kabi, to'liq huquqli veb-serverdir. Aytgancha, WildFly kaput ostida Tomcat-dan servlet konteyneri sifatida foydalanadi. GlassFish-dan farqli o'laroq, WildFly engilroq va sozlash osonroq.

  3. Jetty - avvalgilariga o'xshash, ochiq manba. Eclipse tomonidan ishlab chiqilgan.

    Tomcat singari, u JavaEE ramkasining barcha komponentlarini qo'llab-quvvatlamaydigan oddiy servlet konteyneridir. Shu bilan birga, u engilroq va hatto mobil telefonda ham ishlashi mumkin. U tezda boshlanadi va to'xtaydi va yaxshi tarozida. Tomcat-dan farqli o'laroq, u kichikroq jamiyat va bilim bazasiga ega.

  4. WebLogic - foydalanishdan oldin sotib olishni talab qiladigan litsenziyalangan dastur. Oracle kompaniyasiga tegishli.

    Tomcat bilan solishtirganda, uning funksionalligi biroz kengroq. Ftp protokoli bilan ishlashi mumkin. Ammo ilovalarni ishlab chiqish va sinovdan o'tkazishda u unchalik moslashuvchan emas.

  5. WebSphere (aniq aytganda WebSphere Application Server) pullik dastur hisoblanadi. IBM tomonidan ishlab chiqilgan. WildFly va GlassFish singari, u to'liq huquqli dastur serveridir. Ammo u qulayroq o'rnatish interfeysi va yuqori operatsion ishonchlilikka ega.

    Salbiy tomoni shundaki, u juda ko'p resurslardan foydalanadi, boshlash va to'xtatish uchun uzoq vaqt talab etiladi, bu kichik loyihalarni ishlab chiqishda juda qulay emas.

Qaysi servlet konteyneri yoki dastur serverini tanlash aniq loyihaga bog'liq. Shunday loyihalar borki, ularda hatto begona odam ham o'zini eng yuqori sifatda isbotlay oladi, lekin avvaliga bir narsani yaxshilab tushungan ma'qul. Ehtimol, buning uchun ideal nomzod Tomcat. Biz uni o'rganish bo'yicha birinchi qadamlarni tashladik, keyin esa sizga bog'liq! "Korxonani rivojlantirishga kirish" seriyasining yakuniy maqolalarida biz MVC namunasi bilan tanishamiz. 7-qism. MVC naqshiga kirish (Model-View-Controller) 8-qism. Spring-boot-da kichik dastur yozish
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION