JavaRush /Блоги Java /Random-TG /Tomcat дар Java

Tomcat дар Java

Дар гурӯҳ нашр шудааст
Дар баъзе мавридҳо, ҳар як таҳиягар малакаҳои кофӣ ба даст меорад, ки ӯ дар бораи эҷоди лоиҳаи худ барои татбиқи дониши худ фикр мекунад. Қабули лоиҳаи веб осонтар аст, зеро татбиқи веб-барнома бо ягон маҳдудият, ба монанди барномаҳои мизи корӣ, маҳдуд намешавад. Мизоҷ танҳо ба браузер ниёз дорад ва метавонад бидуни зеркашии ягон тақсимот бо барнома ҳамкорӣ кунад. Бе бақайдгирӣ ва SMS, чунон ки мегӯянд (ҳарчанд ин аз худи барнома вобаста аст). Tomcat дар Java - 1Ҳамин тавр, барои татбиқи як барномаи хуби веб дар Java, шумо наметавонед бе асбобе бо номи Tomcat кор кунед. Мундариҷа:

Tomcat аз Javarush огоҳ аст

Tomcat дар сатҳи 9-и ҷустуҷӯи Java Collections дар курси JavaRush омӯхта мешавад. Дар 2 лексия, Билаабо ба шумо нақл мекунад, ки чӣ гуна Tomcat -ро зеркашӣ ва танзим кардан , инчунин барномаи аввалини веби худро созед .

Tomcat - ин чист?

Tomcat як контейнери сервлети кушода аст, ки инчунин ҳамчун serverи веб амал мекунад. Дар назари аввал, Tomcat як мавзӯи хеле вазнин ба назар мерасад, аммо ин тавр нест. Аксари барномаҳои Java бо истифода аз сатри фармон оғоз карда мешаванд ва баъзе амалҳоро иҷро мекунанд. Чунин замимаҳо як вазифаи пешакӣ муайяншударо иҷро мекунанд, ки баъд аз он онҳо дигар иҷро намешаванд. Чунин барномаҳо одатан усуле доранд, mainки тавассути он онҳоро оғоз кардан мумкин аст. Барномаи веб барои муошират бо муштарӣ тарҳрезӣ шудааст. Агар дархости муштарӣ мавҷуд бошад, он коркард карда мешавад ва ба корбар ҷавоб фиристода мешавад. Дар акси ҳол, барнома бекор аст. Чунин мантиқро дар барномаи стандартӣ чӣ гуна бояд амалӣ кард, бо назардошти он, ки шумо бояд сессияҳоро дастгирӣ кунед, дархостҳои HTTP-ро қабул кунед ва ғайра? Сикл while-true? Не, дар ин чо ба мо халли боэътимод лозим аст. Ин аст он чизе ки Tomcat барои он аст. Дар асл, ин як барномаи Java аст, ки барои кушодани порт барои муоширати муштарӣ, танзими сессияҳо, шумораи дархостҳо, дарозии сарлавҳа ва бисёр амалиётҳои дигар ғамхорӣ мекунад.

Компонентҳои Tomcat

Tomcat дорои ҷузъҳое мебошад, ки вазифаҳои мушаххасро иҷро мекунанд, ки дар бораи онҳо донистан лозим аст. Биёед муфассалтар дида бароем.

Каталина

Ба шарофати ин ҷузъ, таҳиягарон имкон доранд, ки барномаҳои худро дар як контейнер ҷойгир кунанд. Catalina мушаххасоти Servlet API, технологияи асосии вебро дар барномасозии веби Java татбиқ мекунад. Дар асл, Catalina як контейнери сервлет дар дохor Tomcat аст (мо ин консепсияро дар зер муфассалтар дида мебароем).

Яспер

Ба шарофати ин ҷузъ, барномасоз технологияи JSP-ро истифода мебарад. Инҳо ба файлҳои HTML монанданд, танҳо онҳо рамзи Java-ро дарун кардаанд, ки ҳангоми фиристодани саҳифа ба корбар иҷро кардан мумкин аст. Ин ба шумо имкон медиҳад, ки ҳама гуна маълумотро ба саҳифа динамикӣ ворид кунед. Jasper рамзи Java-ро ба HTML табдил медиҳад ва инчунин тағиротҳоро пайгирӣ мекунад ва ба таври худкор онҳоро навсозӣ мекунад.

Койот

Ин ҷузъи муҳимест, ки дархостҳои HTTP-ро аз муштарӣ дар бандари мушаххас гӯш мекунад, ин маълумотро барои коркард дар барнома таъмин мекунад ва инчунин посухҳоро ба корбарон бармегардонад. Яъне, Coyote вазифаи serverи HTTP-ро амалӣ мекунад. Ин ҷузъҳоро бо диаграммаи зерин сохторӣ тавсиф кардан мумкин аст: Tomcat дар Java - 2Дар ин ҷо диаграммаи тахминии таъсири мутақобилаи ҷузъҳо «дар ангуштон» нишон дода шудааст. Дар асл, тарзи кори Tomcat хеле мураккабтар аст, аммо ин барои фаҳмиши асосӣ кофӣ аст.

Насб кардани Tomcat

Барои истифодаи Tomcat дар Java, он бояд дар система насб карда шавад. Шумо метавонед дар бораи чӣ гуна насб кардани Tomcat дар ин мақола хонед, ки он serverҳои дигари барномаро низ фаро мегирад. Ҳамин тавр, бо доштани Tomcat-и корӣ дар IDEA, шумо метавонед кӯшиш кунед, ки сервлети аввалини худро омода созед.

Чӣ тавр сохтани веб-барнома

Барои сохтани веб-барнома, шумо бояд сохтори мушаххаси ҷузвдонҳоро риоя кунед. IntelliJ IDEA дар менюи эҷоди лоиҳа функсияи тавлиди барномаҳои веб дорад. Лоиҳаро бо ин роҳ эҷод карда, шумо метавонед сохтори оддиро бинед: Tomcat дар Java - 3Дар src чун ҳамеша манбаъҳо мавҷуданд ва дар папкаи веб web.xml ва index.jsp тавлид мешаванд. web.xml дастур барои Tomcat аст, ки дар куҷо коркардкунандагони дархост ва маълумоти дигарро ҷустуҷӯ кард. index.jsp саҳифаи асосии веб-барнома аст, ки корбар бояд аввал ба он равад (ин конфигуратсияи пешфарз аст). Ҳамчун иҷрои аввал, шумо метавонед файли index.jsp-ро танҳо таҳрир кунед:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
 </body>
</html>
Агар Tomcat мустақиман дар IDEA насб карда шавад, шумо метавонед serverи барномаро оғоз кунед: Tomcat дар Java - 4Муштарӣ мундариҷаи файли index.jsp-ро дар браузер ҳангоми гузаштан ба '/', яъне ба саҳифаи асосӣ қабул мекунад. Акнун биёед истинодро ба саҳифае илова кунем, ки дар он вақти server ҷойгир хоҳад шуд. Барои сохтани сервлети аввалини худ, шумо бояд китобхонаи servlet-api.jar-ро, ки бо Tomcat меояд, истифода баред (метавонад дар папкаи lib пайдо шавад). Биёед сервлетеро созем, ки вақти serverи ҷориро дар саҳифа нишон диҳад. Барои ин ба шумо лозим аст, ки синф эҷод кунед TimeWorker. Биёед онро дар папкаи src/ru/javarush/tomcat ҷойгир кунем:
package ru.javarush.tomcat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class TimeWorker extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     Date date = new Date();
     req.setAttribute("date", date.toString());
     req.getRequestDispatcher("time.jsp").forward(req, resp);
  }
}
TimeWorkerаз синф мерос мегирад HttpServletва doGet. Дар ин усул мо ду параметр мегирем - requestва response. Ҳамчун мисол, requestатрибут бо ном dataва дорои тасвири сатри санаи ҷорӣ нигоҳ дошта мешавад. Он гоҳ он даъват карда мешавад ва параметрҳо ва requestDispatcherба он интиқол дода мешаванд . Дастгоҳ сохта шудааст. Акнун ба шумо лозим аст, ки дархостҳоро махсус ба ӯ фиристед. Бигзор ҳама гуна гузариш ба саҳифаи time.jsp оварда расонад. web.xml -ро кушоед, конфигуратсияи зеринро дар байни барчаспҳо ҷойгир кунед: requestresponse/time<web-app>
<servlet>
   <servlet-name>timeWorker</servlet-name>
   <servlet-class>ru.javarush.tomcat.TimeWorker</servlet-class>
   </servlet>

<servlet-mapping>
   <servlet-name>timeWorker</servlet-name>
   <url-pattern>/time</url-pattern>
</servlet-mapping>

<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Tagи аввал - servlet- номи сервлетро муайян мекунад ва роҳро ба синфи сервлет, ки дархостҳоро коркард мекунад, муайян мекунад. Tagи дуюм - servlet-mapping- нишон медиҳад, ки сервлет бо ном timeWorkerҳангоми дархост даъват карда мешавад URL/вақт. Tagи сеюм - welcome-file-list- файлеро нишон медиҳад, ки ҳангоми гузаштан ба url /. Ин бояд танзим карда шавад, агар зарурати тағир додани файли пешфарз вуҷуд дошта бошад. Дар ин ҷо ҳамчун намуна дохил карда шудааст. Ҳоло, вақте ки шумо ба он меравед, усул дар синф /timeдаъват карда мешавад ва саҳифаи time.jsp..., ки вуҷуд надорад, бармегардад. Биёед онро дар паҳлӯи index.jsp созем: doGet TimeWorker
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Hello</title>
</head>
<body>
   <h1>Current server time: <%=request.getAttribute("date")%></h1>
</body>
</html>
Оғозаш классикӣ аст, аммо тег h1дорои муроҷиат ба an object аст , ки бо ва requestчаҳорчӯба шудааст . Инҳо барчаспҳои шаблон мебошанд. Рамзи дар ин тегҳо мавҷудбуда пеш аз фиристодани он ба муштарӣ даъват карда мешавад. Хуб, an objectҳо дар чунин тегҳо дар ҳама гуна файли JSP дастрасанд . Дар ин мисол, вақти serverи ҷорӣ, ки аз ҷониби сервлет интиқол дода мешавад, дар он ҷо иваз карда мешавад . Барои роҳат, мо пайвандеро ба файли index.jsp эҷод мекунем : <%= %> request response TimeWorker /time
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
   <a href="/time">Узнать текущее время serverа</a>
 </body>
</html>
Биёед мисолро иҷро кунем: Tomcat дар Java - 5Истинодро пайравӣ кунед: Tomcat дар Java - 6Аҷоиб, ҳама чиз кор мекунад. Дар мисол, мо гузаришро аз саҳифаи асосӣ ба саҳифаи ёрирасон амалӣ кардем, ки ба он параметр интиқол дода шуда, ба корбар намоиш дода шуд. Агар шумо ҳангоми кор кардани сервлетҳо мушкилот дошта бошед, ман тавсия медиҳам, ки ин мақоларо хонед , ки барои ҳалли ин мушкилот маслиҳатҳо медиҳад. Барои мукаммалтар шинос шудан бо сервлетҳо, мо тавсия медиҳем, ки мақолаҳоро хонед ( қисми 1 , қисми 2 ), ки дар он муаллиф эҷоди барномаи оддиро бо истифода аз сервлетҳо ва jsp муфассал тавсиф мекунад.

Чӣ тавр барномаро ба serverи иҷрошаванда дохил кардан мумкин аст

Несмотря на то, что встроенный Tomcat в IDEA — удобная фича, веб-приложение может быть перенесено на другой server и в другой контейнер. Рассмотрим вариант, когда необходимо встроить свое приложение в уже работающий server. Во-первых, необходимо дополнительно разобрать цель и функции контейнера сервлетов. Программа, которая приведена в примере выше — это веб-приложение. Класс TimeWorker — сервлет. Компоненты выполняют исключительно обработку requestов. Данные компоненты должны быть встроены в специальный контейнер сервлетов. Цель контейнера сервлетов — поддержка сервлетов и обеспечение их жизненного цикла. Простейший пример работы Tomcat — сканирование определенной папки с целью определить, появился ли в ней новый сервлет. Если да — инициализировать его и подготовить к приему requestов от клиентов. Если сервлет был обновлен, провести повторную инициализацию для обновления компонентов. При удалении сервлета — остановить обработку requestов, удалить сервлет из Tomcat.

Функции контейнера сервлетов

  1. Обмен данными между сервлетом и клиентами;
  2. Организация клиентских сессий;
  3. Creation программной среды для функционирования сервлета;
  4. Идентификация и авторизация клиентов;
  5. В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Во-вторых, необходимо разобраться, How установить свой сервлет.

Установка сервлета

Tomcat принимает для обработки веб-applications на Java, которые имеют расширение .war. Это How jar, только web. Файлы такого типа объединяют в себе JSP-файлы, сервлеты, class-файлы, статические ресурсы и прочее. При установке такого file в Tomcat происходит его распаковка, а затем запуск, поэтому существует строгое требование к структуре файлов в проекте. Если проект был создан в IDEA, вся структура создана автоматически. Файл war можно создать стандартными средствами IDEA. Для этого необходимо зайти в ProjectStructure -> Artifacts -> Нажать “ +” -> WebApplication: Archive. В открывшемся поле задать Name для итогового war-file, например deployed_war. Ниже необходимо нажать на кнопку Create Manifest… Далее необходимо указать way to папке web проекта. В ней будет создана папка META-INF, в которую будет помещен файл MANIFEST.MF. Далее следует нажать Apply и Ok. Whatбы собрать проект в war-файл, следует во вкладке Build выбрать опцию Build Artifact: Tomcat дар Java - 7В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Tomcat дар Java - 8Теперь можно деплоить этот файл в Tomcat. Деплой applications проще всего выполнить из веб-интерфейса Tomcat. Просто нажмите кнопку выбора file на вкладке Deploy, перейдите к местоположению file WAR и выберите его, затем нажмите кнопку развертывания. В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно примерно таким выводом в консоль: INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

Польза Tomcat для разработки

Для разработчиков контейнеры сервлетов имеют огромную роль, так How решают целый спектр проблем. Для программирования на Java Tomcat обеспечивает несколько серьезных преимуществ:
  1. Самое главное, Tomcat может выполнять роль полноценного web-serverа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-server.

  2. Tomcat способствует обмену данными между клиентом и сервлетом, обеспечивает программный контекст для веб-приложений, берет на себя функции идентификации и авторизации клиентов, создание сессий для каждого из них.

  3. Идоракунии хеле қулайи саҳифаҳои JSP-ро таъмин мекунад. Дар асл, веб-server метавонад танҳо ба html хидмат расонад. Jasper, як ҷузъи Tomcat, codeи дар барчаспҳои шаблони саҳифаи JSP мавҷудбударо ба файли дурусти HTML, ки муштарӣ қабул мекунад, тартиб медиҳад. Ҳама мантиқи шаблонсозӣ дар дохor Tomcat ҷойгир буда, ба шумо имкон медиҳад, ки ҳатто конструкторҳои мураккабро ба шакли классикии HTML илова кунед.

Ва ниҳоят: аксар вақт ба таҳиягарони навкор савол дода мешавад: оё барномаи Java-ро бе mainусули -метод иҷро кардан мумкин аст? Дар назари аввал, агар шумо ба мисолҳои боло нигаред, имконпазир аст. Сервлети мо бе main. Бо вуҷуди ин, он нест. Tomcat усули худро дорад main, ки ҳангоми оғози server даъват карда мешавад. Шумо метавонед ин саволро дар мусоҳиба ба даст оред.

Истинодҳои иловагӣ:

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION