JavaRush /Java блогы /Random-KK /6-бөлім: Сервлет контейнерлері

6-бөлім: Сервлет контейнерлері

Топта жарияланған
Бұл материал «Кәсіпорынның дамуына кіріспе» сериясының бөлігі болып табылады. Алдыңғы мақалалар: 6-бөлім. Сервлет контейнерлері - 1Өткен мақалада біз сервлеттермен танысып, олардың көмегімен веб-қосымшаларды құруды үйрендік. Сервлет контейнерлерісіз бұл мереке мүмкін болмайтынын мұқият қарастыратын кез келді.

Мазмұны:

Сервлет контейнері дегеніміз не

Бұл serverде жұмыс істейтін және біз жасаған сервлеттермен әрекеттесе алатын бағдарлама. Басқаша айтқанда, егер біз веб-қосымшаны serverде іске қосқымыз келсе, алдымен сервлет контейнерін орналастырамыз, содан кейін оған сервлеттерді орналастырамыз. Оның жұмыс істеу жолы қарапайым: клиент serverмен байланысқанда, контейнер оның сұрауын өңдейді, оны қай сервлет өңдеу керектігін анықтайды және оны жібереді. 6-бөлім. Сервлет контейнерлері - 2

Сервлет контейнерлерін қалай пайдалануға болады

Маршрутизация сұрауларынан басқа, сервлет контейнері басқа функцияларды орындайды:
  1. JSP файлдарынан HTML беттерін динамикалық түрде жасайды.
  2. HTTPS хабарламаларын шифрлайды/шифрын шешеді.
  3. Сервлет әкімшілігі үшін шектеулі қатынасты қамтамасыз етеді.
Жалпы, бұл жақсы естіледі, мұның бәрін қалай қолдануға болатынын анықтау ғана қалады. Жарайды, бірдеңені қалай пайдалану керектігін үйрену үшін сізге тек... қолданып көріңіз :) Сонымен бүгін біз жаттығу жасаймыз! Ең танымал сервлет контейнері - Apache Tomcat . Бұл ашық бастапқы code және пайдалану тегін. Операциялық жүйеңізге арналған Tomcat қолданбасын мына сілтемеден жүктеп алыңыз және контейнерлермен әрекетте қалай жұмыс істеу керектігін көрейік.

Tomcat орнату және іске қосу

  1. Tomcat орнату үшін жүктеп алынған мұрағатты қажетті каталогқа жай ғана ашыңыз.

  2. Tomcat іске қосу үшін Java 8 немесе одан жоғары нұсқасы қажет екенін ескеріңіз. JAVA_HOME ортасының айнымалы мәні ағымдағы jdk нұсқасына қатысты екеніне көз жеткізіңіз.

  3. Әрі қарай Tomcat қолданбасына пайдаланушы қатынасын конфигурациялау керек . Бұл conf қалтасында орналасқан tomcat-users.xml файлында орындалады.

    Tomcat алдын ала төрт рөлмен қамтамасыз етілген:

    • manager-gui - графикалық интерфейске және күй бетіне кіру;
    • менеджер-скрипт - мәтіндік интерфейске және күй бетіне кіру;
    • manager-jmx - JMX және күй бетіне кіру;
    • Manager-status - тек күй бетіне кіру.

    <tomcat-users> тегінде біз бұл рөлдерді нақты жазамыз және оларды пайдаланушыға тағайындаймыз:

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

    Енді барлығы іске қосуға дайын!

  4. Қалта қалтасында startup.bat файлын (Linux жүйесінде startup.sh) іске қосыңыз.

  5. Бірнеше секундтан кейін браузерде http://localhost:8080/ сілтемесін ашыңыз . Онда графикалық менеджер пайда болады:

    6-бөлім: Сервлет контейнерлері - 3

    Егер сіз осындай мәзірді көрсеңіз, бұл Tomcat жұмыс істеп тұрғанын білдіреді.

  6. Егер ол жұмыс істемесе, JAVA_HOME және CATALINA_HOME ортасының айнымалы мәндерін қолмен тексеріңіз:

    • JAVA_HOME - Java 8+ ағымдағы нұсқасына сілтеме жасау керек;
    • CATALINA_HOME - Tomcat-қа сілтеме жасау керек немесе жоқ болуы керек (Tomcat-тың басқа нұсқасын көрсетпеу керек).

Tomcat қолданбасына қолданбаны қолдану

Біз Tomcat-ты іске қостық, сондықтан оған қандай да бір жобаны енгізу уақыты келді. Алдыңғы мақаладағы сервлеттерді қолданайық . 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");
   }
}
Орналастыру алдында біздің сервлеттер соғыс мұрағатында жинақталған болуы керек. Бұл үшін әдетте Maven пайдаланылады, бірақ соғыс мұрағатын жасау үшін сізге барлық сервлеттер салыстырылатын web.xml файлы қажет. Біз сервлеттерді жаңа @WebServlet annotationсын пайдаланып жаздық, сондықтан бізде web.xml жоқ. Бақытымызға орай, IDEA біз үшін лас жұмысты жасай алады және жобамызды соғыс мұрағатында жекелей алады. Ол үшін жоба құрылымын ашу керек (Ctrl + Shift + Alt + S) -> Артефактілер -> Қажетті құрылымды таңдау -> «Жоба құруға қосу» жанындағы құсбелгіні қойыңыз -> «OK» түймесін басыңыз. 6-бөлім: Сервлет контейнерлері - 4Ctrl + F9 тіркесімін пайдаланып жоба жасаңыз. Енді біздің соғыс мұрағатымыз мақсатты каталогта.Файлдың 6-бөлім: Сервлет контейнерлері - 5атын қарапайымырақ - мысалы, servlet.war - деп өзгертуге және C:\my\ ішінде ыңғайлырақ жерге жылжытуға болады. Қайнату пайдалануға дайын болғанда, оны контейнерге салыңыз . Мұны екі жолмен жасауға болады.
  1. GUI арқылы

    Ол үшін http://localhost:8080/manager/html сілтемесін орындаңыз . Tomcat сізге логин мен құпия сөзді сұрауы керек.

    Менен кейін барлық қадамдарды қайталасаңыз, логин - пайдаланушы, пароль - пароль .

    Сәтті авторизациядан кейін сіз Tomcat Web Application Manager көресіз. Қолданбалар бөлімінде қазірдің өзінде 5 қолданба бар - бұл онымен жұмыс істеуді жеңілдету үшін қажет Tomcat утorтасының қолданбалары. Болашақта оларды жоюға болады.

    6-бөлім: Сервлет контейнерлері - 6

    Төменде Қолдану бөлімі бар. Оны пайдалана отырып, орналастыру үшін соғыс мұрағатын таңдауға болады. Жолды және контекстті қолмен енгізейік:

    6-бөлім. Сервлет контейнерлері - 7

    «Орналастыру» түймесін басыңыз, біз қолданбаның «Қолданбалар» бөлімінде пайда болғанын көреміз:

    6-бөлім: Сервлет контейнерлері - 8 Tomcat GUI көмегімен біз оны тоқтатып, қайта іске қосып, сеанс ұзақтығын орнатып, оны жоя аламыз. Орналастыру кезінде біз /demo контекстін көрсеттік, бұл біздің қолданбаға http://localhost:8080/demo сілтемесі арқылы қол жеткізу керек дегенді білдіреді . Тексеріңіз, бәрі жұмыс істеуі керек.

  2. Файлдық жүйе арқылы

    Қолданбаны осылай орналастыру үшін Tomcat файлы ашылған каталогты ашып, web қолданбаларына өту керек. Міне, бізге таныс утorталар:

    6-бөлім: Сервлет контейнерлері - 9

    Бізге тек сервлет.war файлын көшіру керек.

    Біз бірнеше секунд күтеміз, біз жаңа сервлет қалтасының пайда болғанын көреміз, бұл біздің қолданбаның орналастырылғанын білдіреді. Таныс Application Manager интерфейсіне өтейік - http://localhost:8080/manager/ . Мұнда біз қолданбамыздың /сервлет контекстінде орналастырылғанын көреміз:

    6-бөлім: Сервлет контейнерлері - 10

    Осы жолмен орналастырылған кезде мәтінмән автоматты түрде орналастырылған соғыс мұрағатының атына тағайындалады. Мәтінмәнді өзгерту үшін қолданбамен бірге жаңадан жасалған қалтаның атын өзгертуге болады, бірақ оған дейін файлды жою қажет: әйтпесе Tomcat қолданбаны мұрағат атауымен қайта орналастырады.

    Көріп отырғаныңыздай, Tomcat қолданбасына қолданбаларды орналастыру көрінгеннен әлдеқайда оңай. Бірақ оның басқа функцияларын пайдалану оңай. Тексерейік.

HTTP орнына HTTPS протоколын пайдалану

Естеріңізде болса, біз HTTP және HTTPS арасындағы айырмашылықты бөлек мақалада талқыладық . HTTPS протоколы HTTP сияқты бірдей протокол, бірақ тасымалданатын деректерді шифрлауды пайдаланады. Клиент жағында шифрлауды браузер басқарады және біз server жағында шифрлауды қамтамасыз етуіміз керек. HTTP сұрауларын Tomcat қабылдап, бағыттайтындықтан, оған шифрлауды тапсыру қисынды болар еді. Мұны істеу үшін сізге қажет:
  1. Өздігінен қол қойылған сертификатты жасаңыз;
  2. Қосымша server параметрлерін жасаңыз.
Осыны жаттығып көрейік.

Сертификат жасау

JDK нұсқасына қарамастан көптеген утorталармен келеді, олардың бірі keytool болып табылады . Бұл шифрлау кілттерін жасауға және олармен жұмыс істеуге арналған құрал. Оны пайдалану үшін пәрмен жолын пайдаланып C:\Program Files\Java\jdk1.8.0_181\bin каталогына өтіп, keytool -genkey -alias tomcat -keyalg RSA пәрменін іске қосыңыз .
  • keytool – параметрлері бар қызметтік бағдарламаны іске қосу;
  • -genkey - жаңа кілтті жасағымыз келетінін көрсетеді;
  • -alias tomcat — кілт бүркеншік атын жасау;
  • -keyalg RSA - кілтті генерациялау алгоритмі ретінде RSA таңдаңыз.
Пәрменді орындағаннан кейін утorта бізбен диалогты бастайды: 6-бөлім: Сервлет контейнерлері - 11Қажетті ақпаратты енгізіңіз. Енді біз үй каталогында кілттер қоймасын (Windows үшін бұл C:\Users\{username}\.keystore) және ондағы tomcat кілтін жасадық. Біз көптеген браузерлер қабылдайтын қарапайым сертификат жасадық. Бұл сертификат коммерциялық қолданбалар үшін жарамсыз: оны тек сынақ мақсатында пайдалануға болады. Өндіріс serverінде сертификаттау органының сертификатын пайдалану керек (мысалы, https://letsencrypt.org/ ).

Серверді орнату

Енді сертификат дайын, server параметрлерін, атап айтқанда SSL қосқышын реттеу керек. Бұл apache-tomcat-9.0.30/conf/ ішінде орналасқан server.xml файлында орындалады . Біз блоктарды табамыз:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
 </Connector>
және олардың жанына конфигурациямызды орналастырамыз:
<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 және keystorePass параметрлеріне бізге сәйкес мәндерді тағайындаймыз, shutdown.bat және startup.bat файлдарын пайдаланып Tomcat-ты сақтап, қайта іске қосыңыз. Енді server https сұрауларын өңдеуге дайын, аз ғана өзгертілген мекенжайда - https://localhost:8443/demo/hello . Сілтемені басқан кезде сіз сертификаттың күмәнді екендігі туралы ескертуді көресіз, бұл таңқаларлық емес. Біраз бұрын сипатталғандай, қалыпты сертификатты алу үшін сертификаттау қызметтерінің бірінің қызметтерін пайдалану қажет. Бірақ осы уақытқа дейін біз өз мақсатымызға жеттік: қолданба HTTPS протоколын қолдана отырып жұмыс істейді, және бұл ең бастысы!

HTML беттерінің динамикалық генерациясы

Енді сервлет контейнерлерінің басқа мүмкіндіктерін – HTML беттерінің динамикалық генерациясын қарастыруды жалғастырайық. Жалықтырғыш статикалық HTML codeының орнына айнымалы мәндерді, циклдарды, массивтерді және басқа тілдік құрылымдарды пайдаланып JAVA codeын жазуға болатын тамаша әлемді елестетіп көріңіз. Сіз елестедіңіз бе? Жақсы жаңалық - ұқсас нәрсе бар, ал жаман жаңалық - ол толығымен жоқ. Егер сіз болжамаған болсаңыз, біз JSP (Java Server Pages) технологиясы туралы айтып отырмыз. Қысқасы, бұл HTML бетіне JAVA codeының бөліктерін енгізуге мүмкіндік беретін технология. Рас, бұл code клиентке жіберілмес бұрын әлі де HTML-ге айналдырылады, бірақ ол әртүрлі факторларды ескере отырып динамикалық түрде жасалады. Мысалы, шартты конструкцияларды қолдануға және қандай да бір жағдайға байланысты әртүрлі мазмұнға қызмет етуге болады. JSP беті мысалы:
<%@ 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 туралы толығырақ мына жерден оқи аласыз . Шындығында... біз бұл үшін емес, сервлет контейнерлері үшін келдік! JSP-тің оған қандай қатысы бар? Қарапайым: JSP-тен JAVA codeын HTML-codeқа түрлендіру сервлет контейнерімен жүзеге асырылады. Сервлет JSP мазмұнын жауап ретінде қайтарғалы жатқанда, контейнер ескертеді және сол мазмұнды клиентке жібермес бұрын алдымен оны браузерде оқылатын HTML бетіне айналдырады. Бүгінгі күні JSP технологиясының көптеген аналогтары бар - Thymeleaf, FreeMarket, Mustache және т.б. Олардың барлығы ұқсас принцип бойынша жұмыс істейді. Жұмыс үшін қайсысын таңдау талғамға байланысты. Бұл сервлет контейнерін таңдауға да қатысты. Мысалдарда біз ең көп таралған контейнер Tomcat-ті қолдандық, бірақ кейбір жобалар басқаларын пайдаланады. Ең танымалдарымен қысқаша танысып, олардың Tomcat-тен айырмашылығын қарастырған жөн.

Tomcat баламалары

  1. GlassFish – Oracle қолдайтын ашық бастапқы codeы бар контейнер.

    Tomcat-тен айырмашылығы, бұл сервлеттерден басқа JavaEE шеңберінің басқа компоненттерімен жұмыс істей алатын толыққанды веб-server. Сонымен қатар, ол әлдеқайда көп жедел жадты пайдаланады. Серверді дәл баптау кезінде икемдірек, бұл пайдалануды қиындатады. JavaEE негізін қолданатын қолданбаларды әзірлеу кезінде пайдаланған жөн.

  2. WildFly - бұрын Jboss . Сондай-ақ ашық дереккөз. Red Hat әзірлеген. Басқа компания өнімімен - JBoss Enterprise Application Platform-мен шатастырмау үшін атау өзгертілді.

    WildFly, GlassFish сияқты, толыққанды веб-server. Айтпақшы, WildFly қалпақ астында Tomcat-ті сервлет контейнері ретінде пайдаланады. GlassFish-тен айырмашылығы, WildFly жеңілірек және орнату оңайырақ.

  3. Jetty - алдыңғыларға ұқсас, ашық бастапқы болып табылады. Eclipse әзірлеген.

    Tomcat сияқты, бұл JavaEE құрылымының барлық құрамдас бөліктерін қолдаусыз қарапайым сервлет контейнері. Сонымен қатар, ол жеңілірек және тіпті ұялы телефонда жұмыс істей алады. Ол тез басталып, тез тоқтайды және жақсы таралады. Tomcat-тен айырмашылығы, оның қауымдастығы мен білім базасы кішірек.

  4. WebLogic — пайдалану алдында сатып алуды талап ететін лицензияланған бағдарламалық құрал. Oracle компаниясына тиесілі.

    Tomcat-пен салыстырғанда оның функционалдығы сәл кеңірек. Ftp протоколымен жұмыс істей алады. Бірақ қолданбаларды әзірлеу және тестілеу кезінде ол соншалықты икемді емес.

  5. WebSphere (дәлірек айтқанда WebSphere қолданбалар serverі) ақылы бағдарламалық құрал болып табылады. IBM әзірлеген. WildFly және GlassFish сияқты, бұл толыққанды қолданбалы server. Бірақ оның ыңғайлы орнату интерфейсі және жоғары жұмыс сенімділігі бар.

    Кемшілігі - ол көп ресурстарды пайдаланады, бастау және тоқтату ұзақ уақытты алады, бұл шағын жобаларды әзірлеу кезінде өте ыңғайлы емес.

Қандай сервлет контейнерін немесе қолданба serverін таңдау нақты жобаға байланысты. Тіпті сырт көзге көрінетін адам өзін жоғары сапада көрсете алатын жобалар бар, бірақ алдымен бір нәрсені мұқият түсінген жөн. Мүмкін, бұл үшін тамаша үміткер - Tomcat. Біз оны зерттеудің алғашқы қадамдарын жасап қойдық, содан кейін ол сізге байланысты! «Кәсіпорынның дамуына кіріспе» сериясының соңғы мақалаларында біз MVC үлгісімен танысамыз. 7-бөлім. MVC үлгісіне кіріспе (Model-View-Controller) 8-бөлім. Spring-boot жүйесінде шағын қолданбаны жазу
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION