JavaRush /Java blogi /Random-UZ /Java tilidagi veb-ilova
Viacheslav
Daraja

Java tilidagi veb-ilova

Guruhda nashr etilgan
Java tilidagi veb-ilova - 1

Kirish

Bir vaqtlar Java ustuvorlik sifatida veb-ilovalarni tanlaganligi sababli o'z mavqeini mustahkamladi. Java o'zining dastlabki kunlaridanoq o'z yo'lini topishga qiynaldi. Birinchidan, men appletlarni taklif qildim. Bu ishlab chiquvchilar uchun statik HTML sahifalarida dinamik tarkib yaratish uchun ko'plab imkoniyatlarni taqdim etdi. Biroq, appletlar ko'p sabablarga ko'ra umidlarni oqlamadi: xavfsizlik, qo'shimcha xarajatlar va boshqalar. Keyin Java tilini ishlab chiquvchilar muqobil - Servlet API ni taklif qilishdi . Va bu to'g'ri qaror bo'lib chiqdi. Servlet API - bu har qanday Java veb-ilovasi, xoh u veb-ga asoslangan ilova yoki so'ralganda ma'lumotni qaytaradigan veb-xizmat bo'lsin, yaratilgan spetsifikatsiyadir. Shunday qilib, Java veb-ilovalari qanday ishlashini tushunish yo'li Servlet API-ni tushunishdan boshlanadi.
Java tilidagi veb-ilova - 2

Servlet API

Shunday qilib, Servlet API - bu til ishlab chiquvchilari Java dasturchilariga taklif qilgan narsadir. Servlet API - bu bizning asosiy savollarimizga javob beradigan spetsifikatsiya. Uni bu yerda topishingiz mumkin: " JSR-000340 JavaTM Servlet 3.1 Baholash uchun yakuniy reliz ". “ 1.1 Servlet nima? ” bobida aytilishicha, servlet Java texnologiyasiga asoslangan va dinamik tarkib (ya’ni kontent) yaratuvchi veb-komponentdir . "Java-asosli" servlet bayt-kodga kompilyatsiya qilingan Java klassi ekanligini anglatadi . Servletlar ba'zan Servlet Engine deb ataladigan servlet konteyneri tomonidan boshqariladi. Servlet konteyneri - bu servlet funksiyalarini ta'minlovchi veb-server kengaytmasi . O'z navbatida, servletlar servlet konteyneri tomonidan amalga oshiriladigan so'rov/javob paradigmasida mijoz bilan o'zaro aloqani ta'minlaydi. " 1.2 Servlet konteyneri nima? " bo'limida aytilishicha, servlet konteyneri veb-server yoki dastur serverining bir qismi bo'lib, u orqali so'rovlar va javoblar yuboriladigan, MIME-ga asoslangan so'rovlar va javoblar yaratiladi va qayta ishlanadi. . Bundan tashqari, servlet konteynerlari servletlarning hayot aylanishini boshqaradi (ya'ni, ularni qachon yaratish, ularni o'chirish va hokazolarni hal qiladi). Barcha servlet konteynerlari so'rovlarni qabul qilish va javoblarni yuborish uchun HTTP protokolini qo'llab-quvvatlashi kerak. Shu oʻrinda shuni qoʻshimcha qilmoqchimanki, MIME bu standart, spetsifikatsiya boʻlib, u maʼlumotni qanday kodlash va xabarlarni Internet orqali yuborish uchun formatlash kerakligini aytadi.
Java tilidagi veb-ilova - 3

Web-server

Veb-server - bu mijozlarning HTTP so'rovlarini qabul qiladigan va ularga HTTP javoblarini (odatda HTML sahifasi, rasm, fayl yoki boshqa ma'lumotlar bilan birga) taqdim etadigan server. So'ralgan manbalar URL manzillari orqali aniqlanadi. Servlet API-ni qo'llab-quvvatlaydigan eng mashhur veb-serverlardan biri bu Apache Tomcat . Ko'pgina veb-serverlar har xil komponentlardan tashkil topgan murakkab mashinalar bo'lib, ularning har biri o'ziga xos funktsiyalarni bajaradi. Masalan:
Java tilidagi veb-ilova - 4

Ulagichlar

— Kirishda bizda mijozlardan kiruvchi so'rovlarni qabul qiluvchi konnektorlar (ya'ni ulagichlar) mavjud. Tomcat-dagi HTTP ulagichi "Coyote" komponenti yordamida amalga oshiriladi. Ulagichlar mijozdan ma'lumotlarni oladi va uni Tomcat Engine-ga uzatadi. Servlet konteyneri - Tomcat Engine, o'z navbatida, mijozdan olingan so'rovni servlet konteyneri bo'lgan "Catalina" komponenti yordamida qayta ishlaydi. Batafsil ma'lumot uchun Tomcat hujjatlariga qarang: " Arxitekturaga umumiy nuqtai ". Servlet API spetsifikatsiyasini qo'llab-quvvatlaydigan boshqa veb-serverlar mavjud. Masalan, " Jetty " yoki " Undertow ". Ularning arxitekturasi o'xshash, shuning uchun bitta servlet konteyneri bilan ishlash tamoyilini tushunib, siz boshqasi bilan ishlashga o'tishingiz mumkin.
Java tilidagi veb-ilova - 5

Veb ilova

Shunday qilib, veb-ilovani ishga tushirishimiz uchun bizga Servlet API-ni qo'llab-quvvatlaydigan veb-server kerak (ya'ni, veb-server uchun Servlet API-ni qo'llab-quvvatlaydigan kengaytma komponentiga ega). Yaxshi. Qanday bo'lmasin, veb-ilova nima? Servlet API spetsifikatsiyasining " 10 ta veb-ilova " bo'limiga ko'ra , veb-ilova bu veb-serverdagi yakuniy dasturni tashkil etuvchi servletlar, HTML sahifalar, sinflar va boshqa resurslar to'plamidir. " 10.6 Veb-ilovalar arxivi fayli " bo'limiga ko'ra , veb-ilova Web ARchive-da (WAR kengaytmali arxiv) paketlanishi mumkin. " Lug'at-219 " sahifasida aytilganidek :
Java tilidagi veb-ilova - 6
Ya'ni, bu veb-ilova ekanligini ko'rsatish uchun JAR o'rniga WAR qilingan. Keyingi muhim fakt: bizning WAR arxivimizda ma'lum bir katalog tuzilishi bo'lishi kerak. Servlet API spetsifikatsiyasida " 10.5 Katalog tuzilishi " bo'limida. Ushbu bobda "WEB-INF" nomli maxsus katalog mavjudligi aytiladi. Ushbu katalog mijozga ko'rinmasligi va unga to'g'ridan-to'g'ri ko'rsatilmasligi bilan ajralib turadi, lekin u servlet kodi uchun ochiqdir. Shuningdek, u WEB-INF katalogida nimani o'z ichiga olishi mumkinligini aytadi:
Java tilidagi veb-ilova - 7
Ushbu butun ro'yxatda biz endi ba'zi web.xml fayli haqida deployment descriptor deb nomlangan narsani bilmaymiz va tushunmaymiz . Bu nima? " 14. Joylashtirish deskriptori " bobi tarqatish deskriptoriga bag'ishlangan. Xulosa qilib aytganda, joylashtirish deskriptori bu veb-ilovani veb-serverda qanday joylashtirishni (ya'ni ishga tushirishni) tavsiflovchi xml faylidir. Masalan, joylashtirish deskriptori ilovamizga kirish uchun qaysi URL manzillardan foydalanish kerakligini, ilovamizga tegishli xavfsizlik sozlamalari va boshqalarni ko'rsatadi. " 14.2 Joylashtirishni qayta ishlash qoidalari " bo'limida aytilishicha, web.xml ilovamiz sozlanishi va ishga tushirilishidan oldin sxema tekshiriladi (ya'ni, web.xml tarkibi sxema bo'yicha to'g'ri yozilganligi tekshiriladi). . Va " 14.3 Deployment Descriptor " bo'limida diagramma bu erda ekanligi ko'rsatilgan: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd Agar fayl mazmuniga qarasak, biz quyidagilarni ko'rishimiz mumkin:
Java tilidagi veb-ilova - 8
XML fayllar uchun qanday sxema ishlatiladi? Sxemalar XML hujjatini qanday to'g'ri to'ldirishni ko'rsatadi: qanday elementlardan foydalanish mumkin, elementlarda qanday turdagi ma'lumotlarni ko'rsatish mumkin, elementlar qanday tartibda borishi kerak, qanday elementlar talab qilinadi va hokazo. XML hujjatining sxemasini Java interfeysi bilan solishtirishingiz mumkin, chunki Java-dagi sxema berilgan interfeysni qanoatlantiradigan (ya’ni berilgan interfeysni amalga oshiradigan) sinflar qanday yozilishi kerakligini ham belgilaydi. Shunday qilib, biz maxfiy bilimlar bilan qurollanganmiz va birinchi veb-ilovani yaratishga tayyormiz!
Java tilidagi veb-ilova - 9

Veb-ilova yaratish

Avtomatik loyiha yaratish tizimlaridan foydalanmasdan zamonaviy Java ilovasi bilan ishlashni tasavvur qilish qiyin. Eng mashhur tizimlardan ba'zilari Maven va Gradle hisoblanadi . Ushbu ko'rib chiqish uchun biz Gradle-dan foydalanamiz. Gradle-ni o'rnatish rasmiy veb-saytida tasvirlangan . Yangi dastur yaratish uchun bizga Gradle-ga o'rnatilgan plagin kerak bo'ladi: " Build Init Plugin ". Java dasturini yaratish uchun siz quyidagi buyruqni bajarishingiz kerak: gradle init --type java-application
Java tilidagi veb-ilova - 10
Loyihani yaratgandan so'ng, biz build.gradle faylini tahrirlashimiz kerak bo'ladi . Bu Build skripti deb ataladi (batafsilroq ma'lumot uchun Gradle hujjatlariga qarang: " Build skriptlarini yozish "). Ushbu fayl loyihani qanday yig'ish va Java loyihasi bilan ishlashning boshqa jihatlarini tavsiflaydi. Plaginlar bloki joriy Gradle loyihasi uchun qaysi " Gradle plaginlari " ishlatilishini tavsiflaydi. Plaginlar loyihamiz imkoniyatlarini kengaytiradi. Masalan, standart plagin " java " dir. Ushbu plagin har doim Java yordamiga muhtoj bo'lsa ishlatiladi. Lekin bizga “ ilova ” plaginiga kerak emas , chunki... uning tavsifida aytilishicha, u "bajariladigan JVM ilovasini" yaratish uchun ishlatiladi, ya'ni. JVM ilovalarini ishga tushirish. Biz WAR arxivi ko'rinishida Web ilova yaratishimiz kerak. Va agar biz Gradle hujjatlarida WAR so'zini qidirsak, biz " War Plugin " ni topamiz. Shuning uchun biz quyidagi plaginlarni belgilaymiz:
plugins {
    id 'java'
    id 'war'
}
Shuningdek, " War Plugin Default Settings "da aytilishicha, veb-ilovaning barcha mazmuni bo'lgan katalog "src/main/webapp" bo'lishi kerak, web.xml bo'lishi kerak bo'lgan bir xil WEB-INF katalogi bo'lishi kerak. joylashgan. Keling, shunday fayl yarataylik. Birozdan keyin to'ldiramiz, chunki... bu uchun bizda hali yetarli ma'lumot yo'q. "Bog'liqlar" blokida biz loyihamizning bog'liqliklarini, ya'ni bizning ilovamiz ishlamaydigan kutubxonalar/ramkalarni ko'rsatamiz. Bunday holda, biz veb-ilovani yozyapmiz, ya'ni biz Servlet APIsiz ishlay olmaymiz:
dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    testCompile 'junit:junit:4.12'
}
provideCompile bu qaramlikni bizning WAR veb-ilova arxivimizga kiritish shart emasligini anglatadi: u faqat kompilyatsiya qilish uchun kerak. Va bajarilganda, bu bog'liqlik boshqa birov (ya'ni veb-server) tomonidan ta'minlanadi. Xo'sh, biz qaysi bog'liqlik omboridan foydalanmoqchi ekanligimiz haqida ma'lumotni qurish skriptida qoldiramiz - barcha ko'rsatilgan bog'liqliklar undan yuklab olinadi:
repositories {
    jcenter()
}
Qurilish skript faylidan qolgan hamma narsani olib tashlaymiz. Endi src\main\java\App.java sinfini tahrir qilaylik. Keling, undan servlet yasaymiz. " 2-BOB. Servlet interfeysi " bo'limidagi Servlet API spetsifikatsiyasi Servlet interfeysida HttpServlet ning asosiy ilovasi mavjudligi aytiladi , bu ko'p hollarda etarli bo'lishi kerak va ishlab chiquvchilar undan meros olishlari kerak. Va " 2.1.1 HTTP so'rovlarini qayta ishlash usullari " bo'limida kiruvchi so'rovlarni qayta ishlashning asosiy usullari ko'rsatilgan. Shunday qilib, App.java sinfini qayta yozamiz:
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();
 	}
}
Demak, bizda hamma narsa tayyor. Qolgan narsa - tarqatish deskriptorini to'g'ri yozish. Diagrammadan quyidagi matnni web.xml ga nusxalang:
<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>
Shuningdek, unda ko'rsatilgan sxemaga yo'l: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd Endi web.xml ning Servlet API spetsifikatsiyasida qanday ko'rinishi kerakligi haqidagi misolni ko'rib chiqamiz. Ushbu misol " 14.5.1 Asosiy misol " bobida keltirilgan . Keling, diagrammada ko'rsatilgan narsalarni spetsifikatsiyada ko'rsatilgan misol bilan birlashtiramiz. Biz quyidagilarni olamiz:
<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>
Ko'rib turganingizdek, biz ilgari ko'rsatilgan sxema va schemaLocation dan foydalanganmiz. Va elementlarning tavsifi 14.5.1-bobdagi misoldan olingan. Agar biz hamma narsani to'g'ri bajargan bo'lsak, biz gradusli urush vazifasini xatosiz bajaramiz:
Java tilidagi veb-ilova - 11
Java tilidagi veb-ilova - 12

Veb-ilovani ishga tushirish

Veb-ilova qanday ishga tushadi? Keling, avval murakkabroq variantni ko'rib chiqaylik. Avvalroq biz Servlet API-ni qo'llab-quvvatlaydigan Apache Tomcat veb-serveri mavjudligini aytdik. Bu shuni anglatadiki, biz to'plangan urush arxivini (ular ham "joylashtirish" deyishadi) ushbu serverda joylashtirishimiz mumkin. " Tomcatni yuklab olish " sahifasida "Ikkilik tarqatishlar" bo'limidan zip formatida "Yadro" yetkazib berish turini yuklab oling. Va yuklab olingan arxivni ba'zi bir katalogga oching, masalan, C:\apache-tomcat-9.0.14. Serverni ishga tushirishdan oldin faylni tahrirlash uchun ochamiz conf\tomcat-users.xmlva unga quyidagi qatorni qo'shamiz: <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/> Endi buyruqlar satrida bin katalogiga o'ting va ni bajaring catalina.bat start. Odatiy bo'lib, server konsoli quyidagi manzilda mavjud bo'ladi http://localhost:8080/manager. Login va parol tomcat-users.xml da ko'rsatganimiz bilan bir xil. Tomcat-da veb-ilovalarni o'z ichiga olgan "webapps" katalogi mavjud. Agar biz o'zimiznikini joylashtirmoqchi bo'lsak, u erda urush arxivimizni nusxalashimiz kerak. Biz ilgari gradle war buyrug'ini ishga tushirganimizda, \build\libs\katalogda urush arxivi yaratilgan. Bu biz nusxalashimiz kerak bo'lgan narsadir. Nusxalashdan keyin sahifani yangilang http://localhost:8080/managerva qarang:
Java tilidagi veb-ilova - 13
ni tugatgandan so'ng http://localhost:8080/javaweb/app, biz servletimizga murojaat qilamiz, chunki Ilgari biz /app so'rovini Ilova servletiga "xaritalashtirdik" (ya'ni xaritalash). Ilova qanday ishlashini tekshirishning tezroq usuli mavjud. Va yig'ish tizimi bu bizga yana yordam beradi. Gradle loyihamizning qurish skriptida biz plaginlar bo'limiga yangi " Grettyid "org.gretty" version "2.3.1" " plaginini qo'shishimiz mumkin: Va endi biz dasturimizni ishga tushirish uchun gradus vazifasini bajarishimiz mumkin:gradle appRun
Java tilidagi veb-ilova - 14
Tafsilotlar uchun " Gretty plaginini qo'shing va ilovani ishga tushiring " ga qarang.
Java tilidagi veb-ilova - 15

Spring va Servlet API

Servletlar hamma narsaning asosidir. Hatto hozirgi mashhur Spring Framework ham Servlet API-ga qo'shimchalardan boshqa narsa emas. Boshlash uchun, Spring Framework bizning loyihamiz uchun yangi bog'liqlikdir. Shuning uchun, keling, uni bog'liqliklar blokidagi qurish skriptiga qo'shamiz: compile 'org.springframework:spring-webmvc:5.1.3.RELEASE' Spring Framework hujjatlarida " 1.1. DispatcherServlet " bo'limi mavjud. Unda aytilishicha, Spring Framework "old kontroller" naqshida qurilgan - bu " DispatcherServlet " deb nomlangan markaziy servlet mavjud bo'lganda. Barcha so'rovlar ushbu servletga keladi va u qo'ng'iroqlarni kerakli komponentlarga topshiradi. Ko'ryapsizmi, hatto bu erda ham servletlar mavjud. Siz tarqatish deskriptoriga tinglovchi qo'shishingiz kerak:
<listener>
	&ltlistener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Bu servlet kontekst hodisasi tinglovchisi. Ya'ni, Servlet konteksti ishga tushganda, Spring konteksti (WebApplicationContext) ham boshlanadi. Servlet konteksti nima? Bu Servle API spetsifikatsiyasida " 4-BOB. Servlet konteksti " bo'limida tasvirlangan . Servlet konteksti - bu servletlar ishlayotgan veb-ilovaning servletning "ko'rinishi". Har bir veb-ilova o'zining Servlet kontekstiga ega. Keyinchalik, Spring Framework-ni yoqish uchun siz kontekst-param - servlet konteksti uchun ishga tushirish parametrini belgilashingiz kerak.
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
Va DispatcherServlet ta'rifi konfiguratsiyani yakunlaydi :
<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>
Va endi biz contextConfigLocation-da ko'rsatilgan faylni to'ldirishimiz kerak. Buni qanday qilish "1.3.1. Deklaratsiya" bobidagi Spring Framework hujjatlarida tasvirlangan:
<?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>
Bu erda nafaqat qaysi paketni skanerlash kerakligini ko'rsatish, balki biz annotatsiyaga asoslangan, ya'ni Bahor qanday ishlashi haqidagi izohlarni nazorat qilishimiz ham muhimdir. Faqat ru.javarush.javaweb paketini yaratish va unga Spring kontroller sinfini joylashtirish qoladi:
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.";
    }
}
Endi gradle appRun-ni ishga tushirib, manzilga o'tsak, http://127.0.0.1:8080/javaweb/appbiz bir xil Hello World-ni olamiz. Ko'rib turganingizdek, Spring Framework Servlet API bilan chambarchas bog'langan va uning ustida ishlash uchun foydalanadi.
Java tilidagi veb-ilova - 16

Izohlar

Ko'rib turganimizdek, izohlar qulay. Va biz shunday deb o'ylagan yagona odam emas edik. Shuning uchun, Servlet API spetsifikatsiyasida, 3.0 versiyasidan boshlab, " 8-BOB Izohlar va ulanish imkoniyati " bo'limi paydo bo'ldi, bunda servlet konteynerlari izohlar orqali Deployment Deskriptorida ilgari ko'rsatilgan narsalarni belgilash qobiliyatini qo'llab-quvvatlashi kerakligini bildiradi. Shunday qilib, web.xml loyihadan butunlay olib tashlanishi mumkin va servlet sinfining yuqorisida @WebServlet izohini belgilashingiz va servletni qaysi yo'l bilan xaritalash kerakligini ko'rsatishingiz mumkin. Bu erda hamma narsa aniq ko'rinadi. Ammo, agar biz bahorni yanada murakkab sozlashlarni talab qiladigan loyihaga bog'lasak nima bo'ladi? Bu erda hamma narsa biroz murakkabroq. Birinchidan, Spring hujjatlarida aytilishicha, Spring-ni web.xml holda sozlash uchun siz WebApplicationInitializer-ni qo'llaydigan o'z sinfingizdan foydalanishingiz kerak. Batafsil ma'lumot uchun " 1.1. DispatcherServlet " bo'limiga qarang . Bu Bahor darsi ekan. Bu erda Servlet API qanday ishlatiladi? Aslida, ServletContainerInitializer Servlet API 3.0 ga qo'shilgan . Java-dagi maxsus mexanizmdan ( SPI deb ataladi ) foydalanib, Spring o'zining servlet konteynerini ishga tushiruvchisini belgilaydi SpringServletContainerInitializer. O'z navbatida, u allaqachon WebApplicationInitializer ilovalarini qidiradi va kerakli usullarni chaqiradi va kerakli sozlamalarni bajaradi. Batafsil ma'lumot uchun " Servlet konteyneri WebApplicationInitializer ilovalarini qanday topadi " bo'limiga qarang. Yuqoridagi sozlamalar quyidagicha amalga oshirilishi mumkin:
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);
    }
}
Endi " Java-asosidagi konfiguratsiya " yordamida biz qaysi paketni skanerlash va izohlarni yoqish kerakligini ko'rsatamiz:
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 {
}
Va SpringControllerning o'zi ru.javarush.javaweb.controllersskanerlashda konfiguratsiya o'zini topa olmasligi, faqat kontrollerlarni qidirishi uchun ga ko'chirildi.
Java tilidagi veb-ilova - 17

Xulosa qilish

Umid qilamanki, bu sharh Java-da veb-ilovalar qanday ishlashiga biroz oydinlik kiritdi. Bu aysbergning faqat uchi, ammo asoslarni tushunmasdan, ushbu poydevorga asoslangan texnologiyalar qanday ishlashini tushunish qiyin. Servlet API har qanday Java veb-ilovasining markaziy qismidir va biz boshqa ramkalar unga qanday mos kelishini ko'rib chiqdik. Davom etish uchun siz quyidagi materiallarni ko'rishingiz mumkin: #Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION