- тармак жөнүндө ;
- программалык камсыздоонун архитектурасы жөнүндө ;
- HTTP/HTTPS протоколдору жөнүндө ;
- Maven негиздери жөнүндө;
- сервлеттер жөнүндө (жөнөкөй веб тиркеме жазуу) .
Мазмуну:
- Сервлет контейнери деген эмне
- Сервлет контейнерлерин кантип колдонуу керек
- Tomcat орнотуу жана иштетүү"
- Tomcat үчүн колдонмону жайылтуу
- HTTP ордуна HTTPS протоколун колдонуу
- Сертификат түзүү
- Серверди орнотуу
- HTML баракчаларынын динамикалык генерациясы
- Tomcat үчүн альтернативалар
Сервлет контейнери деген эмне
Бул serverде иштеген программа жана биз түзгөн сервлеттер менен иштеше алат. Башкача айтканда, эгерде биз веб-тиркемени serverде иштеткибиз келсе, анда биз адегенде сервлет контейнерин жайгаштырабыз, андан кийин ага сервлеттерди жайгаштырабыз. Анын иштөө ыкмасы жөнөкөй: кардар serverге кайрылганда, контейнер анын суроо-талабын иштеп чыгат, аны кайсы сервлет иштетүү керектигин аныктайт жана аны өткөрүп берет.Сервлет контейнерлерин кантип колдонуу керек
Маршруттук суроо-талаптардан тышкары, сервлет контейнери башка функцияларды аткарат:- JSP файлдарынан HTML баракчаларын динамикалык түрдө жаратат.
- HTTPS билдирүүлөрүн шифрлейт/дешифрлейт.
- Сервлет башкаруусу үчүн чектелген мүмкүнчүлүктөрдү берет.
Tomcat орнотуу жана иштетүү
-
Tomcat орнотуу үчүн, жөн гана жүктөлүп алынган архивди керектүү каталогго ачыңыз.
-
Сураныч, Tomcat иштетүү үчүн Java 8 же андан жогору versionсын талап кылаарын эске алыңыз. JAVA_HOME чөйрө өзгөрмөсү учурдагы jdk versionсына тиешелүү экенин текшериңиз.
-
Андан кийин колдонуучунун 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"/>
Эми баары ишке даяр!
-
Бин папкасында startup.bat файлын иштетиңиз (Linux'та startup.sh).
-
Бир нече секунддан кийин браузериңизде http://localhost:8080/ шилтемесин ачыңыз . Ал жерде графикалык менеджер пайда болот:
Эгер сиз мындай менюну көрсөңүз, бул Tomcat иштеп жатканын билдирет.
-
Эгер ал иштебесе, 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" баскычын басыңыз. Ctrl + F9 айкалышы аркылуу долбоор түзүңүз. Азыр биздин согуш архивибиз максаттуу каталогдо. Файлдын атын жөнөкөйраак бир нерсеге өзгөртүүгө болот - мисалы, servlet.war - жана ыңгайлуураак жерге - C:\my\ ичинде жылдырууга болот. Бышыруу колдонууга даяр болгондо, аны контейнерге салыңыз . Бул эки жол менен жасоого болот.
-
GUI аркылуу
Бул үчүн http://localhost:8080/manager/html шилтемесин басыңыз . Tomcat сизден логин менен сырсөздү сурашы керек.
Эгерде сиз менден кийин бардык кадамдарды кайталасаңыз, анда логин колдонуучу, сырсөз - пароль .
Ийгorктүү авторизациядан кийин сиз Tomcat Web Application Manager көрөсүз. Тиркемелер бөлүмүндө буга чейин 5 тиркеме бар - булар Tomcat утorталары, аны менен иштөөнү жөнөкөйлөтүү үчүн зарыл. Алар келечекте алынып салынышы мүмкүн.
Төмөндө Жайгаштыруу бөлүмү. Аны колдонуу менен сиз жайгаштыруу үчүн согуш архивин тандай аласыз. Жолду жана контекстти кол менен киргизели:
"Орнотуу" баскычын чыкылдатыңыз, биз колдонмобуз Тиркемелер бөлүмүндө пайда болгонун көрөбүз:
Tomcat GUIди колдонуу менен биз аны токтотуп, кайра иштетип, сессиянын узактыгын орнотуп, жок кыла алабыз. Жайгаштырууда биз контекстти /демо көрсөттүк, бул биздин колдонмого http://localhost:8080/demo шилтемеси аркылуу кирүүгө тийиш дегенди билдирет . Текшериңиз, баары иштеши керек. -
Файл системасы аркылуу
Тиркемени ушундай жол менен жайгаштыруу үчүн, Tomcat ачылган каталогду ачып, веб колдонмолоруна өтүшүңүз керек. Бул жерде биз тааныш болгон пайдалуу колдонмолор:
Биз эмне кылышыбыз керек болсо, бул жерде биздин servlet.war көчүрүү болуп саналат.
Биз бир нече секунд күтөбүз, жаңы сервлет папкасынын пайда болгонун көрөбүз, бул биздин тиркеме жайгаштырылды дегенди билдирет. Келгиле, тааныш Колдонмо башкаргычынын интерфейсине баралы - http://localhost:8080/manager/ . Бул жерде биз колдонмобуз /сервлет контекстинде орнотулганын көрөбүз:
Ушундай жол менен жайгаштырылганда, контекст автоматтык түрдө жайгаштырылган согуш архивинин атына дайындалат. Контекстти өзгөртүү үчүн, сиз жаңы түзүлгөн папканы тиркеме менен атын өзгөртсөңүз болот, бирок ага чейин файлды жок кылышыңыз керек: антпесе Tomcat тиркемени архивдин аталышы менен кайра жайгаштырат.
Көрүнүп тургандай, Tomcat'ке тиркемелерди жайгаштыруу көрүнгөндөн алда канча оңой. Бирок анын башка функцияларын колдонуу оңой. текшерип көрөлү.
HTTP ордуна HTTPS протоколун колдонуу
Эсиңизде болсо, биз HTTP жана HTTPS ортосундагы айырманы өзүнчө макалада талкууладык . HTTPS HTTP сыяктуу эле протокол, бирок өткөрүлүп берилүүчү маалыматтарды шифрлөөнү колдонот. Кардар тарабында шифрлөө браузер тарабынан ишке ашырылат жана биз server тарабында шифрлөөнү камсыз кылышыбыз керек. HTTP суроо-талаптары Tomcat тарабынан кабыл алынган жана багытталгандыктан, шифрлөөнү ага өткөрүп берүү логикалык жактан туура болмок. Бул үчүн сизге керек:- өз алдынча кол коюлган күбөлүк түзүү;
- Кошумча 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 тандоо.
Серверди орнотуу
Эми сертификат даяр болгондон кийин, сиз 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 үчүн альтернативалар
-
GlassFish - бул Oracle тарабынан колдоого алынган ачык булактуу контейнер.
Tomcatтан айырмаланып, бул сервлеттерден тышкары JavaEE алкагындагы башка компоненттерди иштете ала турган толук кандуу веб-server. Ошол эле учурда, ал көбүрөөк RAM колдонот. Серверди тактоодо ийкемдүү, бул колдонууну кыйындатат. Бул JavaEE алкагын колдонуу менен колдонмолорду иштеп чыгууда колдонууга арзырлык.
-
WildFly - мурда Jboss . Ошондой эле ачык булак. Red Hat тарабынан иштелип чыккан. Аты башка компания продуктусу менен чаташтырбоо үчүн өзгөртүлгөн - JBoss Enterprise Application Platform.
WildFly, GlassFish сыяктуу, толук кандуу веб-server. Айтмакчы, WildFly капоттун астында Tomcatты сервлет контейнери катары колдонот. GlassFishтен айырмаланып, WildFly жеңorрээк жана орнотуу оңой.
-
Jetty - мурункуларына окшош, ачык булак болуп саналат. Eclipse тарабынан иштелип чыккан.
Tomcat сыяктуу эле, бул JavaEE алкагындагы бардык компоненттерди колдобогон жөнөкөй сервлет контейнери. Ошол эле учурда, ал жеңorрээк жана уюлдук телефондо да иштетсе болот. Ал тез башталат жана токтойт жана жакшы таразаланат. Tomcatтан айырмаланып, анын жамааты жана бorм базасы азыраак.
-
WebLogic - колдонуудан мурун сатып алууну талап кылган лицензияланган программа. Oracle компаниясына таандык.
Tomcat менен салыштырганда, анын функционалдуулугу бир аз кененирээк. Ftp протоколу менен иштей алат. Бирок тиркемелерди иштеп чыгууда жана сыноодо ал анчалык ийкемдүү эмес.
-
WebSphere (тактап айтканда WebSphere Application Server) акы төлөнүүчү программалык камсыздоо. IBM тарабынан иштелип чыккан. WildFly жана GlassFish сыяктуу, бул толук кандуу колдонмо serverи. Бирок анын ыңгайлуу орнотуу интерфейси, плюс жогорку оперативдүү ишенимдүүлүгү бар.
Жаман жагы - көп ресурстарды колдонот, баштоо жана токтотуу үчүн көп убакыт талап кылынат, бул чакан долбоорлорду иштеп чыгууда анча ыңгайлуу эмес.
GO TO FULL VERSION