JavaRush /Java блогу /Random-KY /6-бөлүк: Сервлет контейнерлери
Professor Hans Noodles
Деңгээл

6-бөлүк: Сервлет контейнерлери

Группада жарыяланган
Бул материал "Ишкананы өнүктүрүүгө киришүү" сериясынын бир бөлүгү болуп саналат. Мурунку макалалар: 6-бөлүк. Сервлет контейнерлери - 1Акыркы макалада биз сервлеттер менен таанышып, алардын жардамы менен веб тиркемелерди түзүүнү үйрөндүк. Бул майрам ансыз эмнеге мүмкүн эмес экенин жакшыраак карап чыгууга убакыт келди - servlet containers.

Мазмуну:

Сервлет контейнери деген эмне

Бул serverде иштеген программа жана биз түзгөн сервлеттер менен иштеше алат. Башкача айтканда, эгерде биз веб-тиркемени serverде иштеткибиз келсе, анда биз адегенде сервлет контейнерин жайгаштырабыз, андан кийин ага сервлеттерди жайгаштырабыз. Анын иштөө ыкмасы жөнөкөй: кардар serverге кайрылганда, контейнер анын суроо-талабын иштеп чыгат, аны кайсы сервлет иштетүү керектигин аныктайт жана аны өткөрүп берет. 6-бөлүк. Сервлет контейнерлери - 2

Сервлет контейнерлерин кантип колдонуу керек

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

Tomcat орнотуу жана иштетүү

  1. Tomcat орнотуу үчүн, жөн гана жүктөлүп алынган архивди керектүү каталогго ачыңыз.

  2. Сураныч, Tomcat иштетүү үчүн Java 8 же андан жогору versionсын талап кылаарын эске алыңыз. JAVA_HOME чөйрө өзгөрмөсү учурдагы jdk versionсына тиешелүү экенин текшериңиз.

  3. Андан кийин колдонуучунун Tomcat кирүү мүмкүнчүлүгүн конфигурациялашыңыз керек . Бул conf папкасында жайгашкан tomcat-users.xml файлында жасалат.

    Tomcat төрт ролу менен алдын ала берилет:

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

    <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+ учурдагы versionсына кайрылышы керек;
    • CATALINA_HOME - Tomcat'ке кайрылуу керек же жок болушу керек (Tomcat'тын башка versionсын көрсөтпөш керек).

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) -> Artifacts -> Каалаган курулушту тандаңыз -> "Долбоор курууга кошуу" жанындагы кутучаны белгилеңиз -> "OK" баскычын басыңыз. 6-бөлүк: Сервлет контейнерлери - 4Ctrl + F9 айкалышы аркылуу долбоор түзүңүз. Азыр биздин согуш архивибиз максаттуу каталогдо. 6-бөлүк: Сервлет контейнерлери - 5Файлдын атын жөнөкөйраак бир нерсеге өзгөртүүгө болот - мисалы, servlet.war - жана ыңгайлуураак жерге - C:\my\ ичинде жылдырууга болот. Бышыруу колдонууга даяр болгондо, аны контейнерге салыңыз . Бул эки жол менен жасоого болот.
  1. GUI аркылуу

    Бул үчүн http://localhost:8080/manager/html шилтемесин басыңыз . Tomcat сизден логин менен сырсөздү сурашы керек.

    Эгерде сиз менден кийин бардык кадамдарды кайталасаңыз, анда логин колдонуучу, сырсөз - пароль .

    Ийгorктүү авторизациядан кийин сиз Tomcat Web Application Manager көрөсүз. Тиркемелер бөлүмүндө буга чейин 5 тиркеме бар - булар Tomcat утorталары, аны менен иштөөнү жөнөкөйлөтүү үчүн зарыл. Алар келечекте алынып салынышы мүмкүн.

    6-бөлүк: Сервлет контейнерлери - 6

    Төмөндө Жайгаштыруу бөлүмү. Аны колдонуу менен сиз жайгаштыруу үчүн согуш архивин тандай аласыз. Жолду жана контекстти кол менен киргизели:

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

    "Орнотуу" баскычын чыкылдатыңыз, биз колдонмобуз Тиркемелер бөлүмүндө пайда болгонун көрөбүз:

    6-бөлүк: Сервлет контейнерлери - 8 Tomcat GUIди колдонуу менен биз аны токтотуп, кайра иштетип, сессиянын узактыгын орнотуп, жок кыла алабыз. Жайгаштырууда биз контекстти /демо көрсөттүк, бул биздин колдонмого http://localhost:8080/demo шилтемеси аркылуу кирүүгө тийиш дегенди билдирет . Текшериңиз, баары иштеши керек.

  2. Файл системасы аркылуу

    Тиркемени ушундай жол менен жайгаштыруу үчүн, Tomcat ачылган каталогду ачып, веб колдонмолоруна өтүшүңүз керек. Бул жерде биз тааныш болгон пайдалуу колдонмолор:

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

    Биз эмне кылышыбыз керек болсо, бул жерде биздин servlet.war көчүрүү болуп саналат.

    Биз бир нече секунд күтөбүз, жаңы сервлет папкасынын пайда болгонун көрөбүз, бул биздин тиркеме жайгаштырылды дегенди билдирет. Келгиле, тааныш Колдонмо башкаргычынын интерфейсине баралы - http://localhost:8080/manager/ . Бул жерде биз колдонмобуз /сервлет контекстинде орнотулганын көрөбүз:

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

    Ушундай жол менен жайгаштырылганда, контекст автоматтык түрдө жайгаштырылган согуш архивинин атына дайындалат. Контекстти өзгөртүү үчүн, сиз жаңы түзүлгөн папканы тиркеме менен атын өзгөртсөңүз болот, бирок ага чейин файлды жок кылышыңыз керек: антпесе Tomcat тиркемени архивдин аталышы менен кайра жайгаштырат.

    Көрүнүп тургандай, Tomcat'ке тиркемелерди жайгаштыруу көрүнгөндөн алда канча оңой. Бирок анын башка функцияларын колдонуу оңой. текшерип көрөлү.

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

Эсиңизде болсо, биз HTTP жана HTTPS ортосундагы айырманы өзүнчө макалада талкууладык . HTTPS HTTP сыяктуу эле протокол, бирок өткөрүлүп берилүүчү маалыматтарды шифрлөөнү колдонот. Кардар тарабында шифрлөө браузер тарабынан ишке ашырылат жана биз server тарабында шифрлөөнү камсыз кылышыбыз керек. HTTP суроо-талаптары Tomcat тарабынан кабыл алынган жана багытталгандыктан, шифрлөөнү ага өткөрүп берүү логикалык жактан туура болмок. Бул үчүн сизге керек:
  1. өз алдынча кол коюлган күбөлүк түзүү;
  2. Кошумча server жөндөөлөрүн жасаңыз.
Келгиле, муну практикалайлы.

Сертификат түзүү

JDK versionсына карабастан көп сандагы утorталар менен келет, алардын бири keytool . Бул шифрлөө ачкычтарын түзүү жана алар менен иштөө үчүн курал. Аны колдонуу үчүн, буйрук сабын колдонуп, C:\Program Files\Java\jdk1.8.0_181\bin каталогуна өтүп, keytool -genkey -alias tomcat -keyalg RSA буйругун иштетиңиз .
  • keytool - параметрлери менен утorтаны ишке киргизүү;
  • -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://localhost:8443/demo/hello, https суроо-талаптарын иштетүүгө даяр . Шилтемени басканда сиз күбөлүктүн күмөндүү экендиги тууралуу эскертүүнү көрөсүз, бул таң калыштуу эмес. Бир аз мурда айтылгандай, кадимки күбөлүк алуу үчүн күбөлүк кызматтарынын биринин кызматтарын колдонуу керек. Бирок азырынча биз максатыбызга жеттик: тиркеме 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 жөнүндө көбүрөөк окуй аласыз . Чынында... биз бул үчүн эмес, сервлет контейнерлери үчүн келдик! ЖСПнын буга кандай тиешеси бар? Бул жөнөкөй: JAVA codeун JSPден HTML codeуна трансформациялоо сервлет контейнери тарабынан ишке ашырылат. Сервлет JSP мазмунун жооп катары кайтарганы жатканда, контейнер эскертүү алат жана ал мазмунду кардарга жөнөтөрдөн мурун аны браузерде окула турган HTML барагына айлантат. Бүгүнкү күндө JSP технологиясынын көптөгөн аналогдору бар - Thymeleaf, FreeMarket, Mustache жана башкалар. Алардын баары окшош принцип боюнча иштешет. Жумуш үчүн кайсынысын тандоо табит маселеси. Бул сервлет контейнерин тандоого да тиешелүү. Мисалдарда биз эң кеңири таралган контейнер болгон Tomcat колдондук, бирок кээ бир долбоорлор башкаларды колдонушат. Эң популярдуулары менен кыскача таанышып, алардын Tomcatтан айырмасын карап көрүү керек.

Tomcat үчүн альтернативалар

  1. GlassFish - бул Oracle тарабынан колдоого алынган ачык булактуу контейнер.

    Tomcatтан айырмаланып, бул сервлеттерден тышкары JavaEE алкагындагы башка компоненттерди иштете ала турган толук кандуу веб-server. Ошол эле учурда, ал көбүрөөк RAM колдонот. Серверди тактоодо ийкемдүү, бул колдонууну кыйындатат. Бул JavaEE алкагын колдонуу менен колдонмолорду иштеп чыгууда колдонууга арзырлык.

  2. WildFly - мурда Jboss . Ошондой эле ачык булак. Red Hat тарабынан иштелип чыккан. Аты башка компания продуктусу менен чаташтырбоо үчүн өзгөртүлгөн - JBoss Enterprise Application Platform.

    WildFly, GlassFish сыяктуу, толук кандуу веб-server. Айтмакчы, WildFly капоттун астында Tomcatты сервлет контейнери катары колдонот. GlassFishтен айырмаланып, WildFly жеңorрээк жана орнотуу оңой.

  3. Jetty - мурункуларына окшош, ачык булак болуп саналат. Eclipse тарабынан иштелип чыккан.

    Tomcat сыяктуу эле, бул JavaEE алкагындагы бардык компоненттерди колдобогон жөнөкөй сервлет контейнери. Ошол эле учурда, ал жеңorрээк жана уюлдук телефондо да иштетсе болот. Ал тез башталат жана токтойт жана жакшы таразаланат. Tomcatтан айырмаланып, анын жамааты жана бorм базасы азыраак.

  4. WebLogic - колдонуудан мурун сатып алууну талап кылган лицензияланган программа. Oracle компаниясына таандык.

    Tomcat менен салыштырганда, анын функционалдуулугу бир аз кененирээк. Ftp протоколу менен иштей алат. Бирок тиркемелерди иштеп чыгууда жана сыноодо ал анчалык ийкемдүү эмес.

  5. WebSphere (тактап айтканда WebSphere Application Server) акы төлөнүүчү программалык камсыздоо. IBM тарабынан иштелип чыккан. WildFly жана GlassFish сыяктуу, бул толук кандуу колдонмо serverи. Бирок анын ыңгайлуу орнотуу интерфейси, плюс жогорку оперативдүү ишенимдүүлүгү бар.

    Жаман жагы - көп ресурстарды колдонот, баштоо жана токтотуу үчүн көп убакыт талап кылынат, бул чакан долбоорлорду иштеп чыгууда анча ыңгайлуу эмес.

Кайсы сервлет контейнерин же колдонмо serverин тандоо конкреттүү долбоорго жараша болот. Атүгүл ачык-айкын сырттан келген адам өзүн эң жогорку сапатта көрсөтө алган долбоорлор бар, бирок адегенде бир нерсени жакшылап түшүнүү керек. Балким, бул үчүн идеалдуу талапкер Tomcat болуп саналат. Биз аны изилдөөнүн алгачкы кадамдарын жасаганбыз, андан кийин бул сизден көз каранды! "Ишкананы өнүктүрүүгө киришүү" сериясынын акыркы макалаларында биз MVC үлгүсү менен таанышабыз. 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) 8-бөлүк. Жазгы жүктөөдө кичинекей тиркеме жазуу
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION