JavaRush /Java блогу /Random-KY /Java тилиндеги веб-тиркеме
Viacheslav
Деңгээл

Java тилиндеги веб-тиркеме

Группада жарыяланган
Java тorндеги веб-тиркеме - 1

Киришүү

Бир кездерде Java веб-тиркемелерди артыкчылык катары тандап алгандыктан, өзүнүн позициясын бекемдеген. Алгачкы күндөрү Java өз жолун табуу үчүн күрөшүп келет. Биринчиден, мен апплеттерди сунуштадым. Бул иштеп чыгуучуларга статикалык HTML баракчаларында динамикалык мазмунду түзүү үчүн көптөгөн мүмкүнчүлүктөрдү берди. Бирок, апплеттер көптөгөн себептерден улам үмүттөрдү актаган жок: коопсуздук, кошумча чыгымдар жана башкалар. Андан кийин Java тorн иштеп чыгуучулар альтернатива сунуш кылышты - Servlet API . Анан туура чечим болуп чыкты. Servlet API - бул веб-негизделген тиркеме же суроо-талапка ылайык маалыматты кайтарып берүүчү веб-кызмат болобу, кайсы болбосун Java веб тиркемеси курулган спецификация. Ошондуктан, Java веб тиркемелери кантип иштээрин түшүнүү жолу Servlet API түшүнүү менен башталат.
Java тorндеги веб-тиркеме - 2

Сервлет API

Ошентип, Servlet API - бул тилди иштеп чыгуучулар Java иштеп чыгуучуларына сунуш кылган нерсе. Servlet API - бул биздин негизги суроолорубузга жооп бере турган спецификация. Аны бул жерден таба аласыз: " JSR-000340 JavaTM Servlet 3.1 Баалоо үчүн жыйынтыктоочу релиз ". " 1.1 Сервлет деген эмне? " бөлүмүндө сервлет динамикалык мазмунду (б.а. мазмун) түзгөн Java технологиясына негизделген веб-компонент экени айтылат . "Java-негизделген" сервлет byte codeуна компиляцияланган Java классы экенин билдирет . Сервлеттер кээде Сервлет кыймылдаткычы деп аталган сервлет контейнери тарабынан башкарылат. Сервлет контейнери сервлеттин иштөөсүн камсыз кылган веб-server кеңейтүүсү . Өз кезегинде, сервлеттер сервлет контейнери тарабынан ишке ашырылган суроо-жооп парадигмасында кардар менен өз ара аракеттенүүнү камсыз кылат. « 1.2 Сервлет контейнери деген эмне? » бөлүмүндө сервлет контейнери суроо-талаптар жана жооптор жөнөтүлүүчү, MIME негизиндеги суроо-талаптар жана жооптор түзүлө турган жана иштетилүүчү тармактык кызматтарды камсыз кылган веб-serverдин же тиркеме serverинин бир бөлүгү деп айтылат. . Мындан тышкары, сервлет контейнерлери сервлеттердин жашоо циклин башкарат (б.а. аларды качан түзүүнү, жок кылууну ж.б. чечет). Бардык сервлет контейнерлери суроо-талаптарды кабыл алуу жана жоопторду жөнөтүү үчүн HTTP протоколун колдоого алышы керек. Бул жерде MIME бул стандарт, маалыматтын кантип codeдолушу жана Интернет аркылуу жөнөтүлүшү үчүн билдирүүлөрдүн форматталышы керектиги тууралуу спецификация экендигин кошумчалагым келет.
Java тorндеги веб-тиркеме - 3

Web-server

Веб server – бул кардарлардын HTTP сурамдарын кабыл алган жана аларга HTTP жоопторун (көбүнчө HTML баракчасы, сүрөт, файл же башка маалыматтар менен бирге) камсыз кылган server. Суралган ресурстар URL даректери менен аныкталат. Servlet API колдоосу менен эң популярдуу web serverлердин бири - Apache Tomcat . Көпчүлүк веб-serverлер ар кандай компоненттерден турган татаал машиналар болуп саналат, алардын ар бири белгилүү бир функцияларды аткарат. Мисалы:
Java тorндеги веб тиркеме - 4

Туташтыргычтар

— Киргизүүдө бизде кардарлардан түшкөн суроо-талаптарды кабыл алган Коннекторлор (б.а. туташтыргычтар) бар. Tomcat ичиндеги HTTP туташтыргычы "Coyote" компонентин колдонуу менен ишке ашырылат. Коннекторлор кардардан маалыматтарды кабыл алып, аны Tomcat Engineге өткөрүп беришет. Servlet Container - Tomcat Engine, өз кезегинде, сервлет контейнери болгон "Каталина" компонентин колдонуу менен кардардан алынган суроо-талапты иштетет. Көбүрөөк маалымат алуу үчүн Tomcat documentациясын караңыз: " Архитектурага сереп салуу ". Servlet API спецификациясын колдогон башка web serverлер бар. Мисалы, " Жетти " же " Жетки ". Алардын архитектурасы окшош, ошондуктан бир сервлет контейнери менен иштөө принцибин түшүнүп, башкасы менен иштөөгө өтсөңүз болот.
Java тorндеги веб-тиркеме - 5

Веб колдонмо

Ошентип, веб-тиркемени иштетүү үчүн бизге Servlet API колдогон веб-server керек (башкача айтканда, веб-server үчүн Servlet API колдоосун ишке ашырган кеңейтүү компоненти бар). Жакшы. Веб тиркеме деген эмне? Servlet API спецификациясынын " 10 Веб Тиркемелер " бөлүмүнө ылайык , Веб-тиркеме бул веб-serverдеги акыркы тиркемени түзгөн сервлеттердин, HTML барактарынын, класстардын жана башка ресурстардын жыйындысы. " 10.6 Веб-тиркеме архивинин файлы " бөлүмүнө ылайык , веб-тиркемени Web ARchive (WAR кеңейтүүсү менен архив) пакеттөө мүмкүн. « Глоссарий-219 » бетинде айтылгандай :
Java тorндеги веб тиркеме - 6
Башкача айтканда, WAR бул веб-тиркеме экенин көрсөтүү үчүн JAR ордуна жасалган. Кийинки маанилүү факт: биздин WAR архивибизде белгилүү бир каталог түзүлүшү болушу керек. Servlet API спецификациясында " 10.5 Каталог структурасы " бөлүмүндө . Бул бөлүмдө "WEB-INF" деп аталган атайын каталог бар экени айтылат. Бул каталог өзгөчө, ал кардарга көрүнбөйт жана ага түз көрсөтүлбөйт, бирок сервлет codeу үчүн жеткorктүү. Ошондой эле WEB-INF каталогу эмнелерди камтышы мүмкүн экенин айтат:
Java тorндеги веб-тиркеме - 7
Бул тизмеден биз азыр кээ бир web.xml файлы жөнүндө deployment descriptor деп аталган нерсени билбейбиз жана түшүнбөйбүз . Бул не? " 14. Жайгаштыруу Дескриптору " бөлүмү жайылтуу дескрипторуна арналган. Кыскача айтканда, жайгаштыруу дескриптору биздин веб-тиркемени веб-serverде кантип жайгаштырууну (башкача айтканда, иштетүүнү) сүрөттөгөн xml файлы. Мисалы, жайылтуу дескриптору биздин тиркемеге кирүү үчүн кайсы URL даректери колдонулушу керек экенин көрсөтүп турат, биздин тиркемеге тиешелүү коопсуздук жөндөөлөрү ж.б. көрсөтүлгөн. " 14.2 Жайгаштырууну иштетүү эрежелери " бөлүмүндө web.xml биздин тиркеме конфигурацияланып, ишке киргизилгенге чейин схема текшерилет (б.а. web.xml мазмуну схемага ылайык туура жазылганы текшерилет) деп айтылат. . Ал эми " 14.3 Жайгаштыруу Дескриптору " бөлүмүндө диаграмма бул жерде экени көрсөтүлгөн: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd Эгер файлдын мазмунун карасак, анда биз көрө алабыз:
Java тorндеги веб-тиркеме - 8
XML файлдары үчүн кандай схема колдонулат? Схемалар XML documentин кантип туура толтуруу керектигин көрсөтөт: кандай элементтерди колдонсо болот, элементтерде кайсы типтеги маалыматтарды көрсөтүүгө болот, элементтер кандай тартипте жүрүшү керек, кандай элементтер талап кылынат ж.б. XML documentинин схемасын Java интерфейси менен салыштырсаңыз болот, анткени Javaдагы схема ошондой эле берилген интерфейсти канааттандырган класстар (б.а. берилген интерфейсти ишке ашыруучу) кантип жазылыш керек экенин аныктайт. Ошентип, биз жашыруун бorм менен куралдандык жана биринчи веб тиркемени түзүүгө даярбыз!
Java тorндеги веб тиркеме - 9

Веб-тиркеме түзүү

Автоматтык долбоор түзүү системаларын колдонбостон заманбап Java тиркемеси менен иштөөнү элестетүү кыйын. Эң популярдуу системалардын айрымдары Maven жана Gradle болуп саналат . Бул карап чыгуу үчүн биз Gradle колдонобуз. Gradle орнотуу расмий сайтында сүрөттөлгөн . Жаңы тиркемени түзүү үчүн бизге Gradleге орнотулган плагин керек: " Build Init Plugin ". Java тиркемесин түзүү үчүн сиз төмөнкү буйрукту аткарышыңыз керек: gradle init --type java-application
Java тorндеги веб-тиркеме - 10
Долбоорду түзгөндөн кийин, build.gradle файлын түзөтүшүбүз керек болот . Бул Build Script деп аталган (көбүрөөк маалымат алуу үчүн Gradle documentтерин караңыз: " Build Scripts Writing "). Бул файл долбоорду кантип чогултууну жана Java долбоору менен иштөөнүн башка аспектилерин сүрөттөйт. Плагиндер блогу учурдагы Gradle долбоору үчүн кайсы " Gradle плагиндери " колдонулушу керектигин сүрөттөйт. Плагиндер биздин долбоордун мүмкүнчүлүктөрүн кеңейтет. Мисалы, демейки плагин " java " болуп саналат. Бул плагин дайыма Java колдоосуна муктаж болсо колдонулат. Бирок бизге " колдонмо " плагининин кереги жок , анткени... анын сыпаттамасы ал "аткалуучу JVM тиркемесин" түзүү үчүн колдонулат деп айтылат, б.а. JVM тиркемелерин иштетүү. Биз WAR архиви түрүндө Web тиркемесин түзүшүбүз керек. Эгерде биз Gradle documentтеринен WAR деген сөздү издесек, анда “ War Plugin ” табабыз . Ошондуктан, биз төмөнкү плагиндерди белгилейбиз:
plugins {
    id 'java'
    id 'war'
}
Ошондой эле " Согуш плагининин демейки жөндөөлөрүндө " веб-тиркеменин бардык мазмуну камтылган каталог "src/main/webapp" болушу керек деп айтылат, ошол эле WEB-INF каталогу болушу керек, анда web.xml болушу керек. жайгашкан. Келгиле, ушундай файл түзөлү. Бир аздан кийин толтурабыз, анткени... бизде азырынча бул үчүн жетиштүү маалымат жок. "Көз карандылык" блогунда биз долбоордун көз карандылыктарын көрсөтөбүз, башкача айтканда, биздин тиркемебиз иштебей турган китепканалар/алHowтар. Бул учурда, биз веб-тиркеме жазып жатабыз, башкача айтканда, биз Servlet APIсиз иштей албайбыз:
dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    testCompile 'junit:junit:4.12'
}
provideCompile көз карандылыкты биздин WAR веб-тиркеме архивибизге киргизүүнүн кереги жок дегенди билдирет: ал компиляция үчүн гана керек. Ал эми аткарылганда, бул көз карандылыкты башка бирөө (б.а. веб-server) камсыз кылат. Макул, биз куруу скриптинде кайсы көз карандылык репозиторийди колдонгубуз келгени жөнүндө маалыматты калтырабыз - бардык көрсөтүлгөн көз карандылыктар андан жүктөлөт:
repositories {
    jcenter()
}
Биз куруу скрипт файлынан калган баарын алып салабыз. Эми src\main\java\App.java классын түзөтөлү. Андан сервлет жасайлы. " 2-БӨЛҮМ. Servlet Interface " бөлүмүндөгү Servlet API спецификациясы Сервлет интерфейсинде HttpServletтин базалык ишке ашырылышы бар деп айтылат , ал көпчүлүк учурларда жетиштүү болушу керек жана иштеп чыгуучулар андан мурас алышы керек. Ал эми " 2.1.1 HTTP атайын суроо-талаптарды иштетүү ыкмалары " бөлүмүндө келип түшкөн суроо-талаптарды иштетүүнүн негизги ыкмалары көрсөтүлгөн. Ошентип, App.java классын кайра жазалы:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;

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

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		// https://www.oracle.com/technetwork/java/servlet-142430.html
 		PrintWriter out = resp.getWriter();
 		out.println(this.getGreeting());
 		out.close();
 	}
}
Демек, бизде баары даяр окшойт. Жайгаштыруу дескрипторун туура жазуу гана калды. Диаграммадан төмөнкү текстти web.xmlге көчүрүңүз:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="..."
      version="3.1">
      ...
</web-app>
Жана ошондой эле анда көрсөтүлгөн схемага жол: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd Эми Servlet API спецификациясында web.xml кандай болушу керектигинин мисалын карап көрөлү. Бул мисал " 14.5.1 Негизги мисал " бөлүмүндө келтирилген . Диаграммада көрсөтүлгөн нерсени спецификацияда көрсөтүлгөн мисал менен айкалыштыралы. Биз төмөнкүлөрдү алабыз:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1">
      <display-name>A Simple Web Application</display-name>
      <servlet>
		<servlet-name>app</servlet-name>
		<servlet-class>App</servlet-class>
	  </servlet>
	  <servlet-mapping>
		<servlet-name>app</servlet-name>
		<url-pattern>/app</url-pattern>
	  </servlet-mapping>
</web-app>
Көрүнүп тургандай, биз мурда көрсөтүлгөн схеманы жана schemaLocation колдондук. Ал эми элементтердин сүрөттөлүшү 14.5.1-бөлүмдөгү мисалдан алынган. Эгерде биз бардыгын туура кылган болсок, анда биз градиенттик согуш тапшырмасын катасыз аткарабыз:
Java тorндеги веб тиркеме - 11
Java тorндеги веб тиркеме - 12

Веб тиркемесин ишке киргизүү

Веб тиркеме кантип ишке кирет? Келгиле, адегенде татаал вариантты карап көрөлү. Биз мурда Servlet API колдогон Apache Tomcat web serverи бар экенин айтканбыз. Бул биздин чогултулган согуш архивибизди (алар "жайгаштыруу" деп да айтышат) ушул serverге жайгаштыра аларыбызды билдирет. " Tomcat жүктөп алуу " бетинде "Бинардык бөлүштүрүү" бөлүмүнөн "Core" жеткирүү түрүн zip форматында жүктөп алыңыз. Жана жүктөлүп алынган архивди кандайдыр бир каталогго, мисалы, C:\apache-tomcat-9.0.14. Серверди баштоодон мурун, файлды түзөтүү үчүн ачып conf\tomcat-users.xml, ага төмөнкү сапты кошолу: <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/> Эми, буйрук сабында, бин каталогуна барып, аткарыңыз catalina.bat start. Демейки боюнча, server консолу жеткorктүү болот http://localhost:8080/manager. Логин жана сырсөз биз tomcat-users.xml файлында көрсөткөндөй эле. Tomcat'та веб-тиркемелерди камтыган "webapps" каталогу бар. Эгерде биз өзүбүздүн архивибизди жайгаштыргыбыз келсе, анда согуш архивибизди ошол жерге көчүрүшүбүз керек. Биз мурда gradle war командасын иштеткенде, \build\libs\каталогдо согуш архиви түзүлгөн. Бул биз көчүрүп алышыбыз керек. Көчүрүлгөндөн кийин, баракты жаңыртып http://localhost:8080/manager, караңыз:
Java тorндеги веб-тиркеме - 13
аяктагандан кийин http://localhost:8080/javaweb/app, биз сервлетибизге кайрылабыз, анткени Биз мурун Колдонмонун сервлетине / колдонмо сурамын "карталап" койгонбуз (б.а.). Колдонмонун кантип иштээрин текшерүүнүн тезирээк жолу бар. Ал эми монтаждоо системасы бизге бул жагынан дагы жардам берет. Gradle долбоорубуздун куруу скриптинде биз плагиндер бөлүмүнө жаңы " Grettyid "org.gretty" version "2.3.1" " плагинин кошо алабыз: Эми биз тиркемени иштетүү үчүн gradle тапшырмасын аткара алабыз:gradle appRun
Java тorндеги веб-тиркеме - 14
Чоо-жайын билүү үчүн " Gretty плагинди кошуу жана колдонмону иштетүү " караңыз.
Java тorндеги веб-тиркеме - 15

Spring жана Servlet API

Сервлеттер бардык нерсенин негизи болуп саналат. Ал тургай, азыр популярдуу Spring Framework Servlet API кошумчасынан башка эч нерсе эмес. Баштоо үчүн, Жазгы алHow - бул биздин долбоор үчүн жаңы көз карандылык. Ошондуктан, келгиле, аны көз карандылык блогундагы куруу скриптине кошолу: Spring Framework documentациясында " 1.1. DispatcherServletcompile 'org.springframework:spring-webmvc:5.1.3.RELEASE' " бөлүмү бар . Анда Spring Framework "фронттук контроллер" үлгүсүндө курулганы айтылат - бул учурда " DispatcherServlet " деп аталган борбордук сервлет бар. Бардык суроо-талаптар бул сервлетке келет жана ал чалууларды керектүү компоненттерге өткөрүп берет. Көрдүңүзбү, бул жерде да сервлеттер бар. Жайгаштыруу дескрипторуна угуучуну кошушуңуз керек:
<listener>
	&ltlistener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Бул сервлеттин контексттик окуя угуучусу. Башкача айтканда, Сервлет Контексти башталганда Жаз контексти (WebApplicationContext) да башталат. Servlet Контекст деген эмне? Бул Servle API спецификациясында " 4-БӨЛҮМ. Servlet Контекст " бөлүмүндө сүрөттөлгөн . Сервлет контексти бул сервлеттер иштеп жаткан веб-тиркеменин сервлеттин "көрүнүшү". Ар бир веб-тиркеме өзүнүн Сервлет Контекстине ээ. Андан кийин, Spring Framework'ту иштетүү үчүн, контекст-парамды - сервлет контекстинин инициализациялоо параметрин көрсөтүшүңүз керек.
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
Ал эми DispatcherServlet аныктамасы конфигурацияны аяктайт :
<servlet>
	<servlet-name>app</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
 		<param-value></param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>app</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
Эми биз жөн гана contextConfigLocation көрсөтүлгөн файлды толтурушубуз керек. Муну кантип жасоо керектиги "1.3.1. Декларация" бөлүмүндө Жазгы алHowтык documentтерде сүрөттөлгөн:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="ru.javarush.javaweb"/>
    <mvc:annotation-driven/>
</beans>
Бул жерде кайсы пакетти сканерлөө керектигин көрсөтүү гана эмес, биз annotationга негизделген, башкача айтканда, Жаздын кантип иштей тургандыгы боюнча annotationларды көзөмөлдөөнү каалайбыз. Болгону ru.javarush.javaweb пакетин түзүү жана ага Жазгы контроллер классын жайгаштыруу калды:
package ru.javarush.javaweb;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SpringController {

    @GetMapping("/app")
    @ResponseBody
    public String getGreeting() {
        return "Hello world.";
    }
}
Эми gradle appRun иштетип, дарекке барсак, http://127.0.0.1:8080/javaweb/appбиз ошол эле Hello World алабыз. Көрүнүп тургандай, Spring Framework Servlet API менен тыгыз байланышта жана анын үстүндө иштөө үчүн колдонот.
Java тorндеги веб-тиркеме - 16

Аннотациялар

Биз көрүп тургандай, annotationлар ыңгайлуу. Жана биз жалгыз ушундай ойлогон эмеспиз. Ошондуктан, Servlet API спецификациясында 3.0 versionсынан баштап " БӨЛҮМ 8 Аннотациялар жана кошулуу мүмкүнчүлүгү " бөлүмү пайда болду, анда сервлет контейнерлери annotationлар аркылуу Жайгаштыруу Дескрипторунда мурда көрсөтүлгөн нерсени көрсөтүү мүмкүнчүлүгүн колдошу керек экенин белгилейт. Ошентип, web.xml проекттен толугу менен алынып салынышы мүмкүн, ал эми сервлет классынын үстүндө @WebServlet annotationсын көрсөтүп , сервлеттин кайсы жол менен картасын көрсөтсө болот. Бул жерде баары ачык көрүнөт. Бирок, биз Жазды татаал орнотууларды талап кылган долбоорго туташтырсакчы? Бул жерде баары бир аз татаалыраак. Биринчиден, Spring documentациясында Spring'ди web.xmlсиз конфигурациялоо үчүн WebApplicationInitializer ишке ашыра турган өз классыңызды колдонушуңуз керек деп айтылат. Көбүрөөк маалымат алуу үчүн " 1.1. DispatcherServlet " бөлүмүн караңыз . Көрсө бул Жазгы класс экен. Сервлет API бул жерде кантип колдонулат? Чынында, ServletContainerInitializer Servlet API 3.0 кошулган . Javaдагы атайын механизмди ( SPI деп аталат ) колдонуп, Spring өзүнүн сервлет контейнеринин инициализаторун аныктайт SpringServletContainerInitializer. Өз кезегинде, ал буга чейин WebApplicationInitializer ишке ашырууларды издейт жана керектүү ыкмаларды чакырат жана керектүү орнотууларды аткарат. Көбүрөөк маалымат үчүн " Сервлет контейнери WebApplicationInitializer ишке ашырууларын кантип табат " дегенди караңыз. Жогорудагы орнотууларды төмөнкүдөй кылса болот:
package ru.javarush.javaweb.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class AppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // регистрируем конфигурацию созданую высше
        ctx.register(AppConfig.class);
        // добавляем в контекст слушателя с нашей конфигурацией
        servletContext.addListener(new ContextLoaderListener(ctx));

        ctx.setServletContext(servletContext);

        // настраиваем маппинг Dispatcher Servlet-а
        ServletRegistration.Dynamic servlet =
                servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
    }
}
Эми, " Java негизиндеги конфигурацияны " колдонуп, биз кайсы пакетти скандоону + annotationларды иштетүүнү көрсөтөбүз:
package ru.javarush.javaweb.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "ru.javarush.javaweb.controllers")
public class AppConfig {
}
Жана SpringController өзү ге жылдырылды ru.javarush.javaweb.controllers, скандоодо конфигурация өзүн таппай, контроллерлорду гана издейт.
Java тorндеги веб-тиркеме - 17

Жыйынтык чыгаруу

Бул серептөө Java'да веб-тиркемелерди кантип иштээрин бир аз жарык кылды деп үмүттөнөм. Бул айсбергдин чети гана, бирок негиздерин түшүнбөстөн, бул фундаментке негизделген технологиялар кандайча иштээрин түшүнүү кыйын. Servlet API ар кандай Java веб-тиркемесинин борбордук бөлүгү болуп саналат жана биз ага башка алHowтардын кантип туура келгенин карап чыктык. Улантуу үчүн төмөнкү материалдарды көрө аласыз: #Вячеслав
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION