JavaRush /Блоги Java /Random-TG /Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ ир...
Viacheslav
Сатҳи

Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд

Дар гурӯҳ нашр шудааст
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 1

Муқаддима

Тавре ки мо медонем, муваффақияти Java маҳз ба шарофати таҳаввулоти нармафзор, ки барои пайвастшавӣ ба шабака кӯшиш мекунад, ба даст омад. Аз ин рӯ, мо барномаи маъмулии консолии " Hello World " -ро ҳамчун асос мегирем ва мефаҳмем, ки он барои барномаи шабакавӣ аз як барномаи консолӣ чӣ лозим аст. Пас, аввал ба шумо лозим аст, ки лоиҳаи Java эҷод кунед. Барномасозон одамони танбал мебошанд. Дар замонҳои пеш аз таърих, вақте ки баъзеҳо мамонтҳоро шикор мекарданд, дигарон нишаста, кӯшиш мекарданд, ки дар тамоми китобхонаҳои Java ва сохторҳои директория ошуфта нашаванд. Барои он ки таҳиякунанда метавонад раванди эҷоди барномаро назорат кунад, то ки вай танҳо бинависад "Ман китобхонаи фалон versionи 2 мехоҳам" -ро офарид, онҳо асбобҳои махсус - сохтани системаҳоро пайдо карданд. Ду машҳуртарини онҳо Maven ва Gradle мебошанд . Барои ин мақола мо Gradle-ро истифода мебарем. Агар пештар ба мо лозим меомад, ки сохтори директорияро худамон созем, ҳоло Gradle бо истифода аз плагини Gradle Init ба мо имкон медиҳад, ки лоиҳаи Java бо сохтори директория ва синфи асосии Main дар як фармон эҷод кунем: gradle init --type java-application Ин фармон оғозкуниро (init) барои ба мо як барномаи Java (java-application) бо консол Hello World. Пас аз анҷом, файл дар директория пайдо мешавад - build.gradle . Ин скрипти сохтани мост , яъне скрипти муайян барои сохтани барнома бо тавсифи он, ки барои ин кадом амалҳоро иҷро кардан лозим аст. Биёед онро кушоем ва ба он сатр илова кунем: jar.baseName = 'webproject' Gradle ба шумо имкон медиҳад, ки дар лоиҳа амалҳои гуногунро иҷро кунед ва ин амалҳо вазифаҳо номида мешаванд . Бо иҷрои фармон (вазифа) файли JAR gradle buildдар директорияи /build/libs сохта мешавад . Ва, тавре ки шумо тахмин кардед, номи он ҳоло webproject.jar хоҳад буд . Аммо агар мо иҷро кунем java -jar ./build/libs/webproject.jar, мо хато мегирем: no main manifest attribute. Сабаб дар он аст, ки барои барномаи java шумо бояд манифестро замима кунед - ин тавсифи тарзи кор бо барнома, чӣ гуна қабул кардани он аст. Сипас JVM, ки замимаи java-ро иҷро мекунад, медонад, ки кадом синф нуқтаи вуруд ба барнома ва маълумоти дигар аст (масалан, classpath). Агар мо ба мундариҷаи скрипти сохтмон бодиққат назар кунем, мо мебинем, ки плагинҳо пайваст мешаванд. Масалан: apply plugin: 'java' Агар мо ба саҳифаи Gradle Java Plugin равем , мо мебинем, ки манифестро танзим карда метавонем:
jar {
    manifest {
        attributes 'Main-Class': 'App'
    }
}
Синфи асосӣ, нуқтаи вуруд ба барнома, барои мо аз ҷониби Gradle Init Plugin тавлид шудааст. Ва он ҳатто дар параметри mainClassName нишон дода шудааст. Аммо ин ба мо мувофиқ набуд, зеро... ин танзимот ба плагини дигар, Gradle Application Plugin дахл дорад . Ҳамин тавр, мо як барномаи Java дорем, ки Hello World-ро дар экран намоиш медиҳад. Ин барномаи Java дар JAR (Java ARchive) бастабандӣ шудааст. Он оддӣ, ба консол асос ёфтааст, на муосир. Чӣ тавр онро ба барномаи веб табдил додан мумкин аст?
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 2

API servlet

Барои он ки Java бо шабака кор карда тавонист, дар замонҳои қадим мушаххасоти Сервлет API пайдо шуда буд . Маҳз ҳамин мушаххасот ҳамкории муштарӣ ва server, гирифтани паём аз муштарӣ (масалан, браузер) ва ирсоли посухро (масалан, бо матни саҳифа) тавсиф мекунад. Табиист, ки аз он вақт инҷониб бисёр чиз тағйир ёфт, аммо гап дар он аст, ки барои як барномаи Java табдил додани барномаи веб, API Servlet истифода мешавад. Барои он ки беасос тахмин накунем, биёед ин мушаххасотро гирем: JSR-000340 JavaTM Servlet 3.1 . Пеш аз ҳама, мо ба " Боби 1: Шарҳ " таваҷҷӯҳ дорем . Он мафҳумҳои асосиеро, ки мо бояд фаҳмем, тавсиф мекунад. Аввалан, сервлет чист? Дар боби " 1.1 Сервлет чист? " мегӯяд, ки Сервлет ҷузъи Java мебошад, ки аз ҷониби контейнер идора карда мешавад ва мундариҷаи динамикӣ тавлид мекунад. Мисли дигар ҷузъҳои Java, сервлет як синфи Java мебошад, ки ба byte-code тартиб дода мешавад ва метавонад бо истифода аз технологияи Java ба serverи веб бор карда шавад. Муҳим аст, ки сервлетҳо бо муштарии веб (масалан, браузер) дар доираи парадигмаи дархост/ҷавоб, ки аз ҷониби Контейнери Сервлет амалӣ карда мешавад, ҳамкорӣ кунанд. Маълум мешавад, ки Сервлетҳо дар як намуди контейнери Сервлет зиндагӣ мекунанд. Ин чи аст? Дар боби " 1.2 Контейнери Сервлет чист? " гуфта мешавад, ки Контейнери Сервлет як қисми serverи веб ё serverи барномаест, ки хидматҳои шабакавиро пешкаш мекунад, ки тавассути он дархостҳо фиристода мешаванд ва посухҳо фиристода мешаванд. Ин контейнери Сервлет давраи зиндагии сервлетҳоро идора мекунад. Ҳама контейнерҳои Сервлет талаб карда мешаванд, ки ҳадди аққал протоколи HTTP-ро дастгирӣ кунанд, аммо метавонанд дигаронро дастгирӣ кунанд. Масалан, HTTPS. Инчунин муҳим аст, ки Контейнери Сервлет метавонад ҳама гуна маҳдудиятҳои марбут ба амниятро дар муҳите, ки дар он сервлетҳо иҷро мешаванд, ҷорӣ кунад. Инчунин муҳим аст, ки тибқи " 10.6 Архиви Архиви Веб " барномаи веб бояд дар файли WAR (Web Archive) бастабандӣ карда шавад. Яъне, ҳоло мо бояд кӯза ва плагинҳои барномаамонро барои чизи дигар хориҷ кунем. Ва ин плагини Gradle WAR аст . Ва ба ҷои jar.baseName war.baseName-ро нишон диҳед Зеро Азбаски мо дигар плагини jar-ро истифода намебарем, мо танзимоти манифестро низ хориҷ кардем. Вақте ки мо JAR-ро оғоз кардем, ба Java Virtual Machine (JVM) лозим буд, ки тавассути манифест чӣ гуна кор кардан бо замимаи мо гуфта шавад. Зеро JVM онро идора мекард. Барномаи веб, аз афташ, аз ҷониби як намуди веб-server иҷро карда мешавад. Маълум мешавад, ки ӯ бояд бо кадом роҳе ба ӯ бигӯяд, ки бо веб-барномаи мо чӣ гуна кор кардан лозим аст? Ва маълум мешавад, ки ҳа. Барномаҳои веб манифести махсуси худро доранд. Он Deployment Descriptor номида мешавад . Бахши том ба он бахшида шудааст: “ 14. Descriptor Deployment ”. Як бахши муҳим вуҷуд дорад: " Боби 10:". Дар бораи он сухан меравад, ки барномаи веб аз нуқтаи назари API Servlet чист. Масалан, дар боби " 10.5 Structure Directory " нишон дода шудааст, ки Дескриптори ҷойгиркунӣ дар куҷо бояд бошад: /WEB-INF/web.xml. WEB-INF -ро дар куҷо ҷойгир кардан мумкин аст? Тавре ки дар плагини Gradle WAR гуфта шудааст, он макети навро илова мекунад : src/main/webapp.Бинобар ин, биёед чунин директорияро созем, дар дохor мо директорияи WEB-INF ва дар дохor мо файли web.xml эҷод мекунем.Муҳим аст, ки директория WEB-INF номида мешавад, на META-INF! Биёед онро аз " 14.5.1 Намунаи асосӣ " Намунаи XML нусхабардорӣ кунем:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 3
Тавре ки мо мебинем, ҳуҷҷати XML барои конфигуратсия истифода мешавад. Ҳуҷҷати XML барои эътиборнок (эътибор донистан) бояд ба баъзе "схема" мувофиқат кунад. Шумо метавонед инро ҳамчун як намуди интерфейс барои ҳуҷҷати XML фикр кунед. Схема муайян мекунад, ки кадом унсурҳо метавонанд дар ҳуҷҷати XML бошанд, кадом намуди маълумот метавонад унсур, тартиб, талабот ва ҷанбаҳои дигарро муайян кунад. Мисоли аз ҳуҷҷат нусхабардорӣшуда versionи 2.5-ро нишон медиҳад, аммо мо мехоҳем versionи 3.1-ро истифода барем. Табиист, ки ҳангоми тағир додани versionҳо мушаххасот тағир ёфт ва хусусиятҳои нав илова карда шуданд. Аз ин рӯ, шумо бояд схемаи дигареро истифода баред, ки барои versionи 2.5 (web-app_2_5.xsd) истифода шудааст. Кадом схемаро ман бояд барои versionи 3.1 истифода барам? Ҳуҷҷатҳо дар ин боб ба мо кӯмак мекунанд, боби " Дескриптори ҷойгиркунии 14.3 ", ки гуфта мешавад specification is available at http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd , яъне мо бояд истиноди схемаро бо xsd-и муқарраршуда дар ҳама ҷо иваз кунем, фаромӯш накунем, ки онро version="2.5"ба 3.1 тағир диҳем ва инчунин фазои номро дар ҳама ҷо иваз кунем ( xmlns ва дар xsi:schemaLocation). Онҳо нишон медиҳанд, ки мо дар кадом фазои ном кор хоҳем кард (ба таври содда гуем, кадом номҳои элементҳоро мо метавонем истифода барем). Агар шумо файли схемаро кушоед, targetNamespace ҳамон фазои номро дар бар мегирад, ки мо бояд муайян кунем:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 4
Тавре ки мо дар хотир дорем, дар Манифести файли Jar мо навишта будем, ки кадом синфро истифода бурдан мехоҳем. Дар ин ҷо чӣ бояд кард? Дар ин ҷо мо бояд муайян кунем, ки ҳангоми гирифтани дархост аз муштарии веб кадом синфи сервлетро истифода бурдан мехоҳем. Тавсифро дар боби " 14.4 Диаграммаи Дескриптори ҷойгиркунӣ " хондан мумкин аст. Ин чунин хоҳад буд:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 5
Дар ин ҷо ҳама чиз оддӣ аст. Серверлет эълон карда мешавад ва сипас он ба қолаби муайян харита карда мешавад. Дар ин ҳолат, дар /app. Вақте ки қолаб иҷро мешавад, усули сервлет иҷро карда мешавад. Барои зебоӣ, синфи App бояд ба баста интиқол дода шавад, фаромӯш накунед, ки конфигуратсияи xml-ро фаромӯш накунед. Аммо ин ҳама нест. Барнома бояд сервлет бошад. Сервлет будан чӣ маъно дорад? Ин маънои онро дорад, ки мо бояд аз HttpServlet мерос гирем . Намунаро дар боби " 8.1.1 @WebServlet " дидан мумкин аст. Мувофиқи он, синфи App мо чунин хоҳад буд:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class App extends HttpServlet {
    public String getGreeting() {
        return "Hello world.";
    }

	public void doGet(HttpServletRequest request, HttpServletResponse response) {
		response.setContentType("text/html");
		try {
			response.getWriter().println(getGreeting());
		} catch (IOException e) {
			throw new IllegalStateException(e);
		}
	}
}
Аммо лоихаи мо хануз тайёр нест. Азбаски мо ҳоло аз versionи Servlet API 3.1 вобастаем. Ин маънои онро дорад, ки дар скрипти сохтани мо мо бояд вобастагиро аз API Servlet нишон диҳем. JVM бояд донад, ки он чизе, ки шумо дар code навиштаед, дуруст аст ва чӣ тавр истифода бурдани он. Тавре ки мо дар хотир дорем, мушаххасот аслан танҳо интерфейсҳое мебошанд, ки чӣ гуна бояд кор кунанд. Ва татбиқҳо дар тарафи serverи веб ҷойгиранд. Аз ин рӯ, бе API Servlet дар Maven Central Китобхонаи заруриро пайдо хоҳад кард: javax.servlet-api . Ва вурудро ба блоки вобастагӣ илова кунед . Дар анбори Maven, тавре ки шумо дидед, гуфта мешавад, ки таъмин карда шудааст. Пеш аз истифодаи вобастагӣ, шумо бояд миқёсро муайян кунед. Gradle доираи бо номи "таъминшуда" надорад, аммо он доираи " танҳо компиляция " дорад. Аз ин рӯ, мо нишон медиҳем: providedCompile 'javax.servlet:javax.servlet-api:3.1.0' Уф, ҳама чиз хуб аст? Gradle Build лоиҳаи моро ба файли WAR месозад. Ва мо бояд минбаъд бо он чӣ кор кунем? Аввалан, ба мо serverи веб лозим аст. Дар Google мо “ веб-serverи java list ” менависем ва рӯйхати веб-serverҳоро мебинем. Биёед аз ин рӯйхат интихоб кунем, масалан, TomCat . Ба вебсайти Apache Tomcat равед , versionи охиринро (ҳоло versionи 9) ҳамчун бойгонии zip (агар барои Windows) зеркашӣ кунед. Онро дар ягон директория кушоед. Бале, мо serverи веб дорем. Аз феҳристи веб-server дар зеркаталоги бин , мо catalina-ро аз сатри фармон иҷро мекунем ва имконоти дастрасро мебинем. Биёед: catalina start. Ҳар як веб-server директорияе дорад, ки веб-server онро назорат мекунад. Агар дар он ҷо файли замимаи веб пайдо шавад, serverи веб ба насби он шурӯъ мекунад. Ин насбкунӣ ҷойгиркунӣ ё ҷойгиркунӣ номида мешавад . Бале, барои ҳамин " дескриптори густариш ". Яъне, чӣ гуна барномаро дуруст ҷойгир кардан лозим аст. Дар Tomcat ин феҳрист webapps аст . Биёед ҷангеро, ки мо бо истифода аз сохтани gradle сохтаем, нусхабардорӣ кунем. Пас аз ин, дар гузориш мо чизеро мебинем: Deployment of web application archive [tomcat\webapps\webproject.war] has finished in [время] ms Барои боз ҳам беҳтар фаҳмидан, дар директорияи tomcat мо файлро таҳрир карда \conf\tomcat-users.xml, сатрҳои зеринро илова мекунем:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 6
Акнун мо serverро бозоғоз мекунем (catalina stop, catalina start) ва ба суроға меравем.Дар http://127.0.0.1:8080/manager ин ҷо мо роҳҳои ҳама барномаҳоро мебинем. Веб-лоиҳаи мо ба эҳтимоли зиёд роҳ/webproject дода шудааст. Ин роҳ чист? Мушаххасоти дар боби " 10.1 Веб-барномаҳо дар дохor serverҳо " изҳор мекунад, ки барномаи веб бо ягон роҳ дар дохor барнома алоқаманд аст (дар ин ҳолат, /webproject). Ҳама дархостҳо тавассути ин роҳ бо ҳамон ServletContext алоқаманд карда мешаванд. Ин роҳ инчунин contextRoot номида мешавад . Ва тибқи " 10.2 Муносибат бо ServletContext ", контейнери сервлет бо барномаи веб ва ServletContext як ба як алоқаманд аст. Яъне, ҳар як веб-барнома ServletContext-и худро дорад. ServletContext чист ? Тавре ки дар мушаххасот гуфта мешавад, ServletContext an objectест, ки ба сервлетҳо "намоиши барномаеро ", ки дар он кор мекунанд, таъмин мекунад. Context Servlet муфассалтар дар боби 4 мушаххасоти Servlet API тавсиф шудааст. Тааҷҷубовар аст, ки API Servlet дар versionи 3.1 дигар мавҷудияти web.xml-ро талаб намекунад. Масалан, шумо метавонед бо истифода аз эзоҳҳо сервлетро муайян кунед:
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("/app2")
public class App2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        response.getWriter().println("app2");
    }
}
Инчунин дар мавзӯи: " Мусоҳибаи Java EE - JEE Servlet API (Саволҳо ва Ҷавобҳо) " тавсия дода мешавад. Ҳамин тавр, мо Сервлет дорем - он масъул аст, ки ба муштарии веб чӣ посух диҳад. Мо ServletContainer дорем, ки дархостҳоро аз корбар қабул мекунад, ба роҳе, ки бо роҳи сервлет дастрас шудааст, мувофиқат мекунад ва агар мувофиқат пайдо шавад, Сервлетро иҷро мекунад. Хуб. Баҳор дар ин тасвири ҷаҳон чӣ ҷойро ишғол мекунад ?

Spring Web MVC

Хуб, мо як барномаи веб дорем. Акнун мо бояд баҳорро пайваст кунем. Мо инро чӣ тавр карда метавонем? Аввалан, шумо бояд бифаҳмед, ки чӣ тавр ба таври дуруст пайваст кардани Spring ба лоиҳаи худ. Маълум мешавад, ки қаблан ин корро мувофиқи ҳуҷҷатҳои лоиҳаи платформаи баҳор анҷом додан мумкин буд , аммо ҳоло " Платформа 9 апрели соли 2019 ба анҷом мерасад ", яъне тавсия дода намешавад. истифода баред, зеро ба наздикй дигар дастгирй карда намешавад. Ягона роҳ ин аст " Истифодабарандагони платформа ташвиқ карда мешаванд, ки ба истифодаи идоракунии вобастагии Spring Boot шурӯъ кунанд ". Аз ин рӯ, биёед ба ҳуҷҷатгузории Spring Boot гузарем . Иҷозат диҳед фаҳмонам, ки мо худи Spring Boot-ро истифода намебарем, балки танҳо Идоракунии вобастагӣ аз Spring Boot. Яъне, лоиҳаи Spring Boot метавонад дар бораи кадом versionҳои китобхонаҳо (аз ҷумла Spring MVC) маълумот диҳад. Дар он ҷо мо 3.2-ро пайдо хоҳем кард. Истифодаи идоракунии вобастагии Spring Boot дар алоҳидагӣ . Тибқи ҳуҷҷатҳо, ба скрипти сохтмон инҳоро илова кунед:
plugins {
    id 'org.springframework.boot' version '2.0.4.RELEASE' apply false
}
apply plugin: 'io.spring.dependency-management'
Ва
dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}
Тавре ки шумо мебинед, мо нишон додем apply false, яъне. Мо худи Spring Boot-ро истифода намебарем, аммо аз он ҷо идоракунии вобастагӣ истифода мебарем. Ин идоракунии вобастагӣ инчунин BOM - " Bill Of Materials " номида мешавад . Ҳоло мо омодаем, ки худи лоиҳаи Spring Web MVC-ро пайваст кунем. Spring Web MVC як қисми лоиҳаи Spring Framework аст ва мо ба бахши " Web Servlet " таваҷҷӯҳ дорем . Биёед вобастагиро ба скрипти сохтмон илова кунем: compile 'org.springframework:spring-webmvc'. Тавре ки мо мебинем, мо фарогирии миқёсро муқаррар кардем, зеро serverи веб ба мо баҳор намедиҳад. Лоиҳаи мо маҷбур аст, ки китобхонаи баҳорро дар дохor худ дохил кунад. Минбаъд, барои мо муҳим аст, ки қисмати " 1.2. DispatcherServlet "-ро хонем, ки дар он гуфта мешавад, ки Spring MVC дар атрофи намунаи " Фронт контроллер " сохта шудааст , ки дар он як навъ сервлети марказӣ мавҷуд аст, ки конфигуратсия ва ваколатро ба ҷузъҳои дигар таъмин мекунад. . Диспетчерро метавон ҳамчун диспетчер тарҷума кард. Ҳамин тавр, пеш аз ҳама, дар web.xml мо эълон мекунем:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 7
Тавре ки мо мебинем, ин воқеан як шунавандаи муқаррарӣ аст, ки дар мушаххасоти Servlet API муайян карда шудааст. Аниқтараш, ин як ServletContextListener аст, яъне он барои оғоз кардани Context Servlet барои веб-барномаи мо оғоз шудааст. Баъдан, шумо бояд танзимотеро муайян кунед, ки ба Spring дар куҷо конфигуратсияи махсуси xml бо танзимот ҷойгир аст:
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 8
Тавре ки шумо мебинед, ин танҳо як танзимоти муқаррарӣ аст, ки дар сатҳи Сервлет Контекст нигоҳ дошта мешавад, аммо онро Баҳор ҳангоми оғоз кардани Контексти Ариза истифода хоҳад кард. Акнун шумо бояд ба ҷои ҳама сервлетҳо як диспетчери ягонаеро эълон кунед, ки ҳамаи дархостҳои дигарро паҳн мекунад.
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 9
Ва дар ин ҷо ҷодуе нест. Агар мо нигоҳ кунем, он як HttpServlet аст, ки дар он Баҳор корҳои зиёдеро иҷро мекунад, ки онро чаҳорчӯба месозад. Ҳама чиз боқӣ мемонад, ки шаблони мушаххаси URL-ро бо сервлет ҳамоҳанг созад (харитаи):
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 10
Ҳама чиз мисли пештара аст. Акнун биёед чизе эҷод кунем, ки веб-serverи мо бояд намоиш диҳад. Масалан, биёед дар WEB-INF-и худ зеркаталоги саҳифаҳоро созем ва дар он ҷо файли hello.jsp пайдо мешавад. Мундариҷа метавонад соддатарин бошад. Масалан, дар дохor тегҳои html теги h1 бо матни " Hello World " мавҷуд аст. Ва фаромӯш накунед, ки файлеро applicationContext.xml, ки мо қаблан зикр кардем, эҷод кунед. Биёед аз ҳуҷҷатҳои баҳор мисол гирем: " 1.10.3. Ба таври худкор муайян кардани синфҳо ва бақайдгирии таърифҳои лӯбиё ".
Аз Hello World то Spring Web MVC ва сервлетҳо бо он чӣ иртибот доранд - 11
Зеро мо бо ин роҳ худтаърифкуниро фаъол мекунем, ҳоло мо метавонем 2 синф эҷод кунем (онҳо аз ҳисоби истифодаи эзоҳҳои махсуси Баҳор лӯбиёи баҳорӣ ҳисобида мешаванд), ки баҳор ҳоло худашро эҷод мекунад ва замимаи моро бо ёрии онҳо танзим мекунад:
  1. Конфигуратсияи веб барои мисол конфигуратсияи услуби Java:

    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
            registry.jsp("/WEB-INF/pages/", ".jsp");
        }
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    }

    Ин мисол дар ҳуҷҷатҳои Spring Framework тавсиф шудааст: " 1.11. MVC Config ".

    Дар ин ҷо мо ViewResolver-ро ба қайд мегирем, ки барои муайян кардани ҷойгиршавии саҳифаҳои jsp кӯмак мекунад. Усули дуюм кафолат медиҳад, ки " сервлети пешфарз " фаъол аст.

    Шумо метавонед дар ин ҷо бештар дар бораи ин маълумот хонед: " Зарурат ва истифодаи default-servlet-handler чист ".

  2. Назоратчии HelloController барои тавсифи харитасозии дархостҳо ба JSP мушаххас

    @Controller
    public class HelloController {
        @GetMapping("/hello")
        public String handle(Model model) {
            return "hello";
        }
    }

    Дар ин ҷо мо шарҳи @Controller-ро истифода кардем, ки дар ҳуҷҷатҳо дар боби " 1.4. Контроллерҳои эзоҳшуда " тавсиф шудааст.

Ҳоло, вақте ки замимаи мо ҷойгир карда мешавад, вақте ки мо дархост мефиристем /webproject/hello(дар он ҷо /webproject решаи контекст аст), аввал DispatcherServlet коркард карда мешавад. Вай ҳамчун диспетчери асосӣ муайян мекунад, ки мо /* ба дархости ҷорӣ мувофиқат мекунем, яъне DispatcherServlet бояд коре кунад. Он гоҳ он аз тамоми харитаҳои дарёфткардааш мегузарад. Он мебинад, ки HelloController бо усули дастаки мавҷуд аст, ки ба /hello харита шудааст ва онро иҷро мекунад. Ин усул матни "салом"-ро бармегардонад. Ин матн аз ҷониби ViewResolver қабул карда мешавад, ки он ба server мегӯяд, ки файлҳои jsp-ро, ки бояд ба муштарӣ намоиш дода шаванд, дар куҷо ҷустуҷӯ кунад. Ҳамин тариқ, муштарӣ дар ниҳоят ин саҳифаи хеле азизро мегирад.

Хулоса

Умедворам, ки аз мақола маълум мешавад, ки вожаи «контекст» даҳшатнок нест. Ин хусусиятҳо хеле муфиданд. Ва ҳуҷҷатгузорӣ дӯсти мост, на душмани мо. Умедворам, равшан хоҳад шуд, ки Баҳор ба чӣ асос ёфтааст, он чӣ гуна пайваст мешавад ва API Servlet бо он чӣ иртибот дорад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION