- дар бораи шабака ;
- дар бораи меъмории нармафзор ;
- дар бораи протоколҳои HTTP/HTTPS ;
- дар бораи асосҳои Maven;
- дар бораи сервлетҳо (навиштани барномаи оддии веб) .
Мундариҷа:
- Контейнери сервлет чист
- Чӣ тавр истифода бурдани контейнерҳои сервлет
- Насб ва иҷро кардани Tomcat"
- Ҷойгир кардани барнома ба Tomcat
- Истифодаи протоколи HTTPS ба ҷои HTTP
- Ташкor шаҳодатнома
- Танзими server
- Насли динамикии саҳифаҳои HTML
- Алтернативаҳо ба Tomcat
Контейнери сервлет чист
Ин барномаест, ки дар server кор мекунад ва метавонад бо сервлетҳои эҷодкардаи мо ҳамкорӣ кунад. Ба ибораи дигар, агар мо хоҳем, ки веб-барномаи худро дар server иҷро кунем, мо аввал контейнери сервлетро ҷойгир мекунем ва сипас сервлетҳоро дар он ҷойгир мекунем. Тарзи кори он оддӣ аст: вақте ки муштарӣ бо server тамос мегирад, контейнер дархости ӯро коркард мекунад, муайян мекунад, ки кадом сервлет бояд онро коркард кунад ва ба он интиқол диҳад.Чӣ тавр истифода бурдани контейнерҳои сервлет
Илова ба дархостҳои масир, контейнери сервлет дигар вазифаҳоро иҷро мекунад:- Саҳифаҳои HTML-ро аз файлҳои JSP динамикӣ тавлид мекунад.
- Паёмҳои HTTPS-ро рамзкушоӣ/рамзкун мекунад.
- Барои маъмурияти сервлет дастрасии маҳдудро таъмин мекунад.
Насб ва иҷро кардани Tomcat
-
Барои насб кардани Tomcat, танҳо бойгонии зеркашидашударо ба директорияи дилхоҳ кушоед.
-
Лутфан қайд кунед, ки Tomcat барои кор кардан versionи Java 8 ё навтарро талаб мекунад. Боварӣ ҳосил кунед, ки тағирёбандаи муҳити JAVA_HOME ба versionи ҷории jdk дахл дорад.
-
Минбаъд шумо бояд дастрасии корбарро ба Tomcat танзим кунед . Ин дар файли tomcat-users.xml, ки дар папкаи conf ҷойгир аст, анҷом дода мешавад.
Tomcat бо чаҳор нақш пешакӣ таъмин карда мешавад:
- Manager-gui - дастрасӣ ба интерфейси графикӣ ва саҳифаи ҳолати;
- Manager-скрипт - дастрасӣ ба интерфейси матнӣ ва саҳифаи ҳолати;
- manager-jmx - дастрасӣ ба JMX ва саҳифаи ҳолати;
- менеҷер-мақом - дастрасӣ танҳо ба саҳифаи вазъ.
Дар дохor теги <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 -ро иҷро кунед (startup.sh дар Linux).
-
Пас аз чанд сония, истиноди http://localhost:8080/ -ро дар браузери худ кушоед . Менеҷери графикӣ дар он ҷо пайдо мешавад:
Агар шумо чунин менюро бинед, ин маънои онро дорад, ки Tomcat кор мекунад.
-
Агар он кор накунад, тағирёбандаҳои муҳити JAVA_HOME ва CATALINA_HOME-ро дастӣ тафтиш кунед:
- JAVA_HOME - бояд ба versionи ҷории Java 8+ муроҷиат кунад;
- CATALINA_HOME - бояд ба Tomcat муроҷиат кунад ё ғоиб бошад (набояд ба versionи дигари 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 сервлетҳо навиштем, аз ин рӯ мо web.xml надорем. Хушбахтона, IDEA метавонад кори ифлосро барои мо иҷро кунад ва лоиҳаи моро ба таври инфиродӣ дар бойгонии ҷанг печонад. Барои ин ба шумо лозим аст, ки сохтори лоиҳаро кушоед (Ctrl + Shift + Alt + S) -> Артефактҳо -> Сохтмони дилхоҳро интихоб кунед -> Қуттии паҳлӯи “Дар сохтани лоиҳа дохил кунед” -> “Хуб”-ро клик кунед. Бо истифода аз комбинатсияи Ctrl + F9 лоиҳа созед. Ҳоло бойгонии ҷангии мо дар феҳристи ҳадаф қарор дорад.Файлро метавон ба чизи соддатар табдил дод - масалан, servlet.war - ва ба ҷои мувофиқтар - дар C:\my\ кӯчонида шавад. Вақте ки пиво барои истифода омода аст, онро дар як контейнер ҷойгир кунед . Инро бо ду роҳ анҷом додан мумкин аст.
-
Тавассути GUI
Барои ин, ба истиноди http://localhost:8080/manager/html пайравӣ кунед . Tomcat бояд аз шумо логин ва паролро талаб кунад.
Агар шумо ҳамаи қадамҳоро пас аз ман такрор кунед, пас логин корбар аст, парол парол аст .
Пас аз иҷозати бомуваффақият шумо Manager Tomcat Web Application мебинед. Бахши Барномаҳо аллакай 5 барномаро дар бар мегирад - инҳо барномаҳои утorтаи Tomcat мебошанд, ки барои содда кардани кор бо он заруранд. Онҳо метавонанд дар оянда хориҷ карда шаванд.
Дар зер бахши ҷойгиркунӣ мавҷуд аст. Бо истифода аз он, шумо метавонед архиви ҷангиро барои ҷойгиркунӣ интихоб кунед. Биёед роҳ ва контекстро дастӣ ворид кунем:
"Ҷойгир кардан" -ро клик кунед, мо мебинем, ки замимаи мо дар бахши Барномаҳо пайдо шудааст:
Бо истифода аз Tomcat GUI мо метавонем онро қатъ кунем, аз нав оғоз кунем, дарозии сессияро муқаррар кунем ва онро нест кунем. Ҳангоми ҷойгиркунӣ, мо контексти /demo-ро муайян кардем, ки маънои онро дорад, ки барномаи мо бояд тавассути истиноди http://localhost:8080/demo дастрас шавад . Санҷед, ҳама чиз бояд кор кунад. -
Тавассути системаи файлӣ
Барои ҷойгиркунии барнома бо ин роҳ, шумо бояд директорияеро кушоед, ки дар он Tomcat кушода шудааст ва ба webapps равед. Инҳоянд барномаҳои коммуналӣ, ки мо бо онҳо шинос ҳастем:
Ба мо танҳо лозим аст, ки servlet.war-и худро ба ин ҷо интиқол диҳед.
Мо чанд сония интизор мешавем, мо мебинем, ки папкаи нави сервлет пайдо шуд, ки ин маънои онро дорад, ки замимаи мо ҷойгир шудааст. Биёед ба интерфейси шиноси менеҷери Барномаҳо равем - http://localhost:8080/manager/ . Дар ин ҷо мо мебинем, ки барномаи мо дар контексти /servlet ҷойгир карда шудааст:
Вақте ки бо ин роҳ ҷойгир карда мешавад, контекст ба таври худкор ба номи бойгонии ҷанги ҷойгиршуда таъин карда мешавад. Барои тағир додани контекст, шумо метавонед папкаи навтаъсисшударо бо барнома тағир диҳед, аммо пеш аз он шумо бояд файлро нест кунед: дар акси ҳол Tomcat барномаро бо номи бойгонӣ дубора ҷойгир мекунад.
Тавре ки шумо мебинед, ҷойгиркунии барномаҳо дар Tomcat назар ба он ки ба назар мерасад, хеле осонтар аст. Аммо дигар вазифаҳои он барои истифода осон аст. Биёед тафтиш кунем.
Истифодаи протоколи HTTPS ба ҷои HTTP
Агар шумо дар хотир доред, мо фарқияти байни HTTP ва HTTPS-ро дар мақолаи алоҳида муҳокима кардем . HTTPS ҳамон протоколи HTTP аст, аммо рамзгузории маълумоти интиқолшударо истифода мебарад. Дар тарафи муштарӣ, рамзгузорӣ аз ҷониби браузер идора карда мешавад ва мо бояд рамзгузориро дар тарафи server таъмин кунем. Азбаски дархостҳои HTTP аз ҷониби Tomcat қабул ва интиқол дода мешаванд, ба он додани рамзгузорӣ мантиқӣ мебуд. Барои ин ба шумо лозим аст:- Эҷоди шаҳодатномаи худ имзошуда;
- Танзимоти иловагии serverро созед.
Ташкor шаҳодатнома
JDK бо шумораи зиёди утorтаҳо, новобаста аз version, яке аз онҳо 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
Акнун, ки сертификат омода аст, шумо бояд танзимоти server, яъне пайвасткунаки SSL-ро танзим кунед. Ин дар файли server.xml, ки дар apache-tomcat-9.0.30/conf/ ҷойгир аст, анҷом дода мешавад . Мо чунин блокҳоро пайдо мекунем:<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 идома диҳем. Ҷаҳони идеалиро тасаввур кунед, ки дар он ба ҷои codeи HTML статикии дилгиркунанда, шумо метавонед рамзи JAVA-ро бо истифода аз тағирёбандаҳо, ҳалқаҳо, массивҳо ва дигар сохторҳои забонӣ нависед. Шумо тасаввур кардед? Хабари хуш ин аст, ки чизи шабеҳ вуҷуд дорад, хабари бад ин аст, ки он пурра вуҷуд надорад. Агар шумо тахмин накарда бошед, мо дар бораи технологияи JSP (Java Server Pages) сухан меронем. Хулоса, ин технологияест, ки ба шумо имкон медиҳад, ки қисмҳои рамзи JAVA-ро ба саҳифаи HTML ворид кунед. Дуруст аст, пас ин 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 ба он чӣ дахл дорад? Ин оддӣ аст: табдor codeи JAVA аз JSP ба codeи HTML тавассути контейнери сервлет анҷом дода мешавад. Вақте ки сервлет мундариҷаи JSP-ро ҳамчун посух бармегардонад, контейнер огоҳӣ мегирад ва пеш аз фиристодани он мундариҷа ба мизоҷ аввал онро ба саҳифаи HTML-хондашавандаи браузер табдил медиҳад. Имрӯз аналогҳои зиёди технологияи JSP мавҷуданд - Thymeleaf, FreeMarket, Mustache ва ғайра. Ҳамаи онҳо аз рӯи принсипи монанд кор мекунанд. Кадоме аз онҳоро барои кор интихоб кардан ин як табъ аст. Ин ба интихоби контейнери сервлет низ дахл дорад. Дар мисолҳо мо Tomcat-ро истифода бурдем, ки контейнери маъмултарин аст, аммо баъзе лоиҳаҳо дигаронро истифода мебаранд. Бояд ба таври мухтасар бо маъмултаринҳо шинос шавед ва ба фарқиятҳои онҳо аз Tomcat назар кунед.
Алтернативаҳо ба Tomcat
-
GlassFish як контейнери кушодаасос мебошад, ки аз ҷониби Oracle дастгирӣ карда мешавад.
Баръакси Tomcat, он як веб-serverи мукаммалест, ки ба ғайр аз сервлетҳо метавонад ҷузъҳои дигарро аз чаҳорчӯбаи JavaEE идора кунад. Дар айни замон, он миқдори зиёди RAM-ро истифода мебарад. Ҳангоми танзими дақиқи server чандиртар аст, ки истифодаи онро мушкилтар мекунад. Ҳангоми таҳияи барномаҳо бо истифода аз чаҳорчӯбаи JavaEE истифода бурдан меарзад.
-
WildFly - қаблан Jboss . Инчунин манбаи кушода. Аз ҷониби Red Hat таҳия шудааст. Ном барои пешгирӣ кардани иштибоҳ бо маҳсулоти дигари ширкат - JBoss Enterprise Application Platform иваз карда шуд.
WildFly, ба монанди GlassFish, як веб-serverи мукаммал аст. Воқеан, дар зери капот WildFly Tomcat-ро ҳамчун контейнери сервлет истифода мебарад. Баръакси GlassFish, WildFly сабуктар аст ва насб кардан осонтар аст.
-
Jetty - монанд ба пештара, манбаи кушода аст. Аз ҷониби Eclipse таҳия шудааст.
Мисли Tomcat, он як контейнери оддии сервлет аст, ки бидуни дастгирии ҳама ҷузъҳои чаҳорчӯбаи JavaEE. Дар айни замон, он сабуктар аст ва ҳатто метавонад дар телефони мобилӣ идора карда шавад. Он зуд оғоз ва қатъ мешавад ва хуб миқёс мекунад. Баръакси Tomcat, он дорои ҷомеаи хурдтар ва пойгоҳи дониш аст.
-
WebLogic нармафзори иҷозатномадорест, ки пеш аз истифода харидро талаб мекунад. Моликияти Oracle.
Дар муқоиса бо Tomcat, функсияи он каме васеътар аст. Бо протоколи ftp кор карда метавонад. Аммо ҳангоми таҳия ва санҷиши барномаҳо он қадар чандир нест.
-
WebSphere (аниқтараш WebSphere Application Server) як нармафзори пулакӣ мебошад. Аз ҷониби IBM таҳия шудааст. Ба монанди WildFly ва GlassFish, он як serverи мукаммали барномаҳо мебошад. Аммо он дорои интерфейси осонтари танзимот ва инчунин эътимоднокии баланди амалиётӣ мебошад.
Камбудии он дар он аст, ки он захираҳои зиёдро истифода мебарад, барои оғоз кардан ва қатъ кардан вақти зиёд мегирад, ки ҳангоми таҳияи лоиҳаҳои хурд чандон қулай нест.
GO TO FULL VERSION