JavaRush /Блоги Java /Random-TG /Бе пафос. Биёед дар бораи Java EE, сервлетҳо ва контейнер...
eGarmin
Сатҳи

Бе пафос. Биёед дар бораи Java EE, сервлетҳо ва контейнерҳои онҳо сӯҳбат кунем

Дар гурӯҳ нашр шудааст
Дар ин мавзӯъ, ман мехостам ошкоро дар бораи фаҳмиши ман дар бораи сервлетҳо сӯҳбат кунам, контейнерҳои сервлет кадомҳоянд, аксарият, агар на ҳама, чаҳорчӯбаҳои фронталии веб кадомҳоянд ва инчунин ба мавзӯи иртибототи контейнерҳои сервлет ва serverҳои барномавӣ дахл кунам. якдигар ва контейнерҳои сервлет ва веб-server. Бе пафос.  Биёед дар бораи Java EE, сервлетҳо ва контейнерҳои онҳо сӯҳбат кунем - 1Пеш аз оғози сӯҳбат мехоҳам қайд намоям, ки ман воқеан интизорам, ки баҳсу мунозира сурат мегирад, зеро... Дар ин ҷо ман намехоҳам як пораи рамзро бидиҳам, балки фақат мехоҳам ба моҳияте дахл кунам, ки онро ҳамеша бо калима ифода кардан мумкин аст. Ман кӯшиш мекунам, ки ҳамаи он нуктаҳоеро, ки ҳангоми бори аввал оғоз кардам ба ман равшан набуданд, баён кунам. Вақте ки ман дар форумҳои гуногун саволҳо додам, ки контейнери сервлети Tomcat аз ҳама гуна serverи барномаҳо чӣ фарқ дорад, бигӯед WebSphere ё Geronimo, танҳо одамоне, ки ҷуръат карданд, ки ҷавоб диҳанд, ашхосе буданд, ки ба ҷуз "ба Википедиа нигаред" ё " чизе гуфта натавонистанд. гуфтан душвор аст, замимаҳои server - ин инфрасохтори мураккаб барои замимаҳои корпоративӣ аст, ки..." бла бла бла. Ман ба ин гуна одамон тоқат карда наметавонам ва гумон мекунам, ки аксари шумо ҳам не. Мо беадолатии таърихиро ислох мекунем. Бирав…

Сервлетҳо

Новобаста аз он ки касе чӣ мегӯяд, сервлет саҳифаи вебест, ки дар Java навишта шудааст. Баъзеҳо мегӯянд, ки ман хато мекунам ва сервлет як барномаи веб аст ва дар ин мафҳумҳо фарқият вуҷуд дорад, аммо ин тавр нест. Ҳоло ҳеҷ тафовуте вуҷуд надорад ва сайтҳое, ки дар PHP навишта шудаанд, инчунин метавонанд бехатарии веб-барномаҳо номида шаванд. Акнун ин комилан табиист, зеро... php OOP-ро пурра дастгирӣ мекунад ва CMS-ҳо ба монанди Joomla инро фаъолона истифода мебаранд. Сервлет дар сатҳи code чист? Ин синфест, ки дорои як қатор усулҳои хоб аст ва бубинад, ки оё касе ба онҳо тавассути дархостҳои GET ё POST HTTP дастрасӣ дорад. Онхое. Мо дар браузер якчанд дархости GET-ро чоп кардем, усули мувофиқи синфи сервлет онро қабул мекунад ва сипас ба он дар шакли саҳифаи HTML посух медиҳад. Ба маънои классикии сервлет, чуноне ки онро Sun тасаввур карда буд, ин саҳифа аз сатри <!DOCTYPE htm>> сар карда, бо сатри </html> ба сатр ба сатр фиристода мешуд. Ҳамин тавр, дар Java як синфи асосии сервлет мавҷуд аст, ки Servlet. Илова бар ин, як қатор синфҳои дигар мавҷуданд, ки аз ин синфи асосӣ мерос мегиранд ва ба ин васила фаъолияти онро васеъ мекунанд. Сервлет ҳамин аст - дигар чизе нест. Ин танҳо як аналоги Java-и codeи PHP аст, ки он низ дар server иҷро мешавад ва танҳо посух ба дархости веб-браузер дар шакли саҳифаи веб ба муштарӣ фиристода мешавад. Ҳама.

Чаҳорчӯбаҳои веби фронталӣ

Субтитр мураккаб аст ва одатан онҳо танҳо чаҳорчӯбаи фронт-охири ё ҳатто web muzzle менависанд , аммо ман қарор додам, ки дар ин ҷо таъкид кунам, ки вақте ки мо дар бораи чаҳорчӯбаҳои фронталӣ гап мезанем, мо дар бораи GUI барои кор бо Java тавассути браузери веб сухан меронем. Онхое. ин ҷо боз дар бораи вебсайтҳо дар Java гап мезанем, яъне. дар бораи сервлетҳо. Қариб ҳама чаҳорчӯбаи фронталӣ чӣ гуна аст, масалан, Apache Struts. Ин танҳо маҷмӯи синфҳоест, ки синфи асосиро васеъ мекунанд Servlet. Дигар чизе. Онхое. ин танҳо роҳи дигари эҷоди ҳамон сервлети муқаррарӣ аст. Ин танҳо он аст, ки таҳиягарони ин чаҳорчӯба (ё ба ибораи дигар, таҳиягарони ин технология) бар ин назаранд, ки илова кардани синфи асосӣ Servletбо баъзе усулҳо барои барномасоз назар ба функсияи ночизе, ки сервлети классикии Sun/Oracle қулайтар аст. дорад.

Саҳифаҳои JSP

Қариб дарҳол ба майнаи таҳиягарони консепсияи сервлети Java як идеяи дигар омад. Азбаски мо сервлет менависем, ки вазифаи он фиристодани саҳифаи html ба мизоҷ аст, пас шояд дурусттар аст, ки ин саҳифаи html-ро фавран нависед ва агар ба шумо дар Java як навъ мантиқ лозим бошад, пас онро мустақиман ворид кунед. ба html. Агар он равшантар нашавад, пас ибора метавонад кӯмак кунад: саҳифаи jsp аналоги саҳифаи php аст. Мушкил? Он гоҳ ман боз шарҳ медиҳам. Ҳангоми навиштани саҳифа дар PHP мо чӣ кор мекунем? Мо html-и статикӣ дорем ва вақте ки ба мо лозим аст, ки дар PHP ягон мантиқро ворид кунем, ба монанди ҳалқаҳо ва шартҳо, мо онро ба бадани тег ворид мекунем <?php … ?>. Бо jsp ҳама чиз якхела аст, танҳо мантиқ дар Java тоза навишта шудааст, ки рамзи он ба бадани тег ворид карда мешавад <% … %>. Биёед бори дигар ба мафҳуми сервлет баргардем. Аслан, саҳифаи JSP сервлет аст, аммо каме ба таври дигар навишта шудааст. Дар сервлети муқаррарӣ мо усулеро менависем, ки баъзе мантиқро иҷро мекунад ва дар асоси натиҷаҳои он барои муштарӣ саҳифаи HTML тавлид мекунад. Танҳо пас аз чанд вақт, таҳиягарони сервлет фикр карданд: чӣ мешавад, агар дар усул амалан мантиқ вуҷуд надошта бошад ва тақрибан танҳо ташаккули саҳифаи html рух диҳад, пас оё дарҳол навиштани саҳифаи html ба он осонтар намебуд? ки бояд ҳадди ақали Java-ро созад? Хуб, як чизи охирин дар бораи саҳифаҳои jsp. Бори аввал ба чунин саҳифа дастрасӣ пайдо мешавад, он ба сервлет тартиб дода мешавад ва сипас иҷро мешавад. Дархостҳои минбаъда ба ин саҳифаи jsp зудтар хоҳанд буд, зеро он аллакай тартиб дода мешавад ва танҳо бояд иҷро карда шавад.

Контейнери сервлет

Ҳамин тавр, мо синфи сервлет ё саҳифаи JSP навиштем. Баъд чӣ? Чӣ тавр онҳоро ба serverи веб тела додан мумкин аст, масалан apache, то он метавонад онҳоро ба браузери веби корбар фиристад? Веб-server метавонад танҳо html ирсол кунад ва агар саҳифаи мо, масалан, codeи php дошта бошад, пас веб-server аввал саҳифаро тавассути тарҷумоне, ки php-ро ба html тарҷума мекунад, мегузаронад ва танҳо баъд натиҷа ба муштарӣ фиристода мешавад. Бо сервлетҳо тақрибан ҳамин чиз рӯй медиҳад - пеш аз фиристодан, онҳо бояд иҷро карда шаванд, то саҳифаи HTML тавлид шавад ва контейнери сервлет маҳз ҳамон чизест, ки барои иҷрои сервлетҳо ва рамзи саҳифаи jsp масъул аст. Онхое. Контейнери сервлет барои java аналоги модули тарҷумони php дар веб-server мебошад. Ҳамин тариқ, вақте корбар суроғаро дар браузери веб ворид мекунад, дархост ба serverи веб фиристода мешавад, веб-server мефаҳмад, ки сервлет дархост карда мешавад ва дархостро ба контейнери сервлет интиқол медиҳад. Пас аз ин, контейнери сервлет сервлетро иҷро мекунад, саҳифаи HTML-ро ба веб-server мефиристад, ки дар навбати худ онро ба муштарӣ бармегардонад. Оё контейнери сервлет мустақилона кор карда метавонад, яъне. бе serverи веб? Чизе ба монанди Tomcat бешубҳа метавонад. Ва агар мо хоҳем, ки сайте созем, ки ба ҷуз саҳифаҳои бар сервлетҳо дигар саҳифаҳои html надошта бошанд, пас контейнери сервлет барои мо кофӣ аст. Аммо агар мо хоҳем, ки сайтро аз сервлетҳо ва масалан, саҳифаҳои PHP муттаҳид кунем, пас мо бояд веб-serverро насб кунем. Ғайр аз он, на ҳама serverҳои веб контейнери сервлет доранд, ки ба таври нобаёнӣ дохил карда шудаанд, аммо қариб ҳама ба шумо имкон медиҳанд, ки онро ҳамчун плагин насб кунед. Аз ин рӯ, агар мо хоҳем, ки вебсайти худро дар ягон хостинги Интернет, ки дар он ҷо Apache кор мекунад, оғоз кунем, пас мо бояд аз провайдер пурсем, ки контейнери сервлет пайваст аст ё не.

Java EE

Ба истилоҳ JavaSE (Java Standard Edition) мавҷуд аст. Ин консепсия ҳама синфҳоро дар бар мегирад java, ки барои истифодаи онҳо мо бояд онҳоро ворид кунем (масалан, java.util.Date) ё ҳатто ба ин кор лозим нест (масалан, Stringазбаски он дар баста ҷойгир аст java.lang). Ва Java EE (Java Enterprise Edition) мавҷуд аст. Ин синфҳо инчунин ба Sun/Oracle тааллуқ доранд, аммо ягона фарқият дар он аст, ки оғози истифодаи онҳо дар лоиҳа душвортар аст. Як хатти оддӣ import…басанда нахоҳад буд, зеро... лоиха тартиб дода намешавад. Барои ислоҳ кардани вазъият, шумо бояд файли китобхонаи javaee.jar- ро пайдо кунед ва онро ба лоиҳа дохил кунед. Инро метавон тавассути хосиятҳои лоиҳа дар муҳити рушд анҷом дод. Аксар вақт мегӯянд, ки ин раванди пайвастшавӣ номида мешавад: лақаби кӯзаро дар роҳи сохтмон ё синфии лоиҳа сабт кунед.

Сервери барномаҳо

Акнун тасаввур кунед, ки мо лоиҳаи сервлети худро тартиб додаем, ки Java EE-ро истифода мебарад. Ҳама чиз хуб аст, аммо ҳоло мо бояд синфҳои тартибдодаамонро дар контейнери сервлет ҷойгир кунем. Фарз мекунем, ки онҳо ин корро карданд. Оё аризаи мо кор мекунад? Ҷавоб не. Ҳангоми дастрасӣ ба сервлет, истисноҳо партофта мешаванд, ки нишон медиҳанд, ки баъзе синфҳо пайдо нашудаанд. Чаро? Зеро мо бо лағжидани мураттибро «фиреб» додаем javaee.jar в classpath, яъне. компилятор дид, ки синфҳо аз Java EE дар ҷои худ ҳастанд ва ором шуданд, аммо контейнери сервлет ин синфҳоро намебинад, аммо аз сервлети мо истинод ба онҳоро мебинад. Оё ин вазъиятро дар як контейнери сервлет ҳал кардан мумкин аст? Албатта ҳа, ба шумо танҳо лозим аст, ки файли китобхонаи javaee.jar- ро ба ҷузвдон бо сервлети мо дар контейнери сервлет илова кунед . Акнун тасаввур кунед, ки чунин лоиҳаҳо зиёд хоҳанд буд ва онҳо ҳама дар як контейнери сервлети Tomcat кор мекунанд. Ин маънои онро дорад, ки шумо бояд ин файли jar-ро ба ҷузвдони ҳар як сервлет нусхабардорӣ кунед. Ин номувофиқ ва нодуруст аст. Вазъият тавассути ҷорӣ кардани консепсияи serverи барномавӣ ҳал карда шуд, ки дар он ин файл кайҳо дар як нусха мавҷуд аст ва ҳама сервлетҳо метавонанд ба он дастрасӣ дошта бошанд ва нусхаи худро надоранд. Ба назари ман, ин хеле қулай ва мантиқист. Табиист, ки ин ҳама сару садоҳо аз як файли jar нест (ман онро мисол овардам) - ин гуна файлҳо зиёданд. Аммо ин ҳама он чизе нест, ки serverҳои барнома ба мо медиҳанд. Худи serverҳои барнома метавонанд бо бисёр захираҳо, масалан, пойгоҳи додаҳо пайваст шаванд. Дар ин ҳолат, сервлети мо метавонад худи чунин пайвастшавиро накушояд, балки онро танҳо аз serverи барномаҳо бигирад. Дар контейнери сервлет ин имконнопазир аст, зеро... контейнер то андозае serverи замимаи ҷудошуда мебошад. Дар контейнер, сервлет бояд ҳамеша ба худи пойгоҳи додаҳо пайваст эҷод кунад. Чизе монанди ин... Архиви ҷангӣ Архиви ҷангӣ чист? WAR веб-архив аст. Дар асл, он танҳо як файли zip аст, ба монанди ҳама гуна кӯза. Асосан, ин танҳо як роҳи печонидани вебсайти мост, ки аз бисёр саҳифаҳои веб, саҳифаҳои jsp ва синфҳои сервлет иборат аст, ба як файли zip. web.xml web.xml тавсифкунандаи ҷойгиркунӣ номида мешавад. Ин файлест, ки аблаҳона тасвир мекунад, ки дархости кадом сатри браузери вебро барои коркард ба кадом синфи сервлет фиристад, то контейнери сервлет ошуфта нашавад, кадом сервлет барои чӣ масъул аст. Умуман, дар Java тасвир кардани танзимот дар ҳама навъҳои файлҳои xml хеле муд аст, аммо вақтҳои охир тамоюли дур шудан аз ин анъана вуҷуд дорад. Чӣ тавр, шумо мепурсед? Ва тавассути шарҳҳо. Синфҳои аннотатсионӣ худашон коре намекунанд; онҳо танҳо барои тавсифи ҳама гуна танзимот (мета-маълумот) на дар файли xml алоҳида, балки бевосита дар code сохта шудаанд. Хеле бароҳат. Аммо, ҳоло як марҳилаи муайяни мобайнӣ вуҷуд дорад, ки баъзе аз танзимот бо шарҳҳо ва баъзеи дигар бо xml муайян карда мешаванд ва ин метавонад печида бошад, зеро Шумо ба xml нигаред ва як танзимотро мебинед, аммо мувофиқи эзоҳҳо дигаре вуҷуд дорад. Кадомаш афзалияти баландтар дорад? Чӣ тавр донистан…

Хулоса

Инро навишта, гумон кардам, ки чунин баррасии зуд ба касе кумак намекунад, зеро... ягон мушаххасот ва мисоле надорад, аммо аз тарафи дигар, он чи навишта шудааст, назанед, пас бигзоред.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION