JavaRush /Kurslar /All lectures for UZ purposes /Servletlarni Konfiguratsiyasi

Servletlarni Konfiguratsiyasi

All lectures for UZ purposes
Daraja, Dars
Mavjud

Dasturlar so'rovlarni qayta ishlash uchun zarur bo'lgan infratuzilmaviy binlar deklaratsiya qilishi mumkin. DispatcherServlet har bir maxsus bin uchun WebApplicationContext ni tekshiradi. Agar mos keladigan bin turlari mavjud bo'lmasa, unda DispatcherServlet.properties faylida keltirilgan sukut bo'yicha turlar ishlatiladi.

Ko'p hollarda, MVC Config boshlash uchun eng yaxshi nuqta hisoblanadi. U Java yoki XMLda zarur binlarni e'lon qiladi va ularni sozlash uchun yuqori darajadagi konfiguratsiya qayta chaqiruv API ni taqdim etadi.

Spring Boot Java asosidagi MVC konfiguratsiyasiga tayangan holda Spring MVCni sozlaydi va ko'plab qo'shimcha qulay opsiyalarni taqdim etadi.

1.1.4. Servletlarni Konfiguratsiyasi

Servlet 3.0+ muhitida web.xml faylga alternativ yoki uni birgalikda servlet konteynerini dasturiy ravishda sozlash imkoniyati mavjud. Quyidagi misolda DispatcherServlet registratsiya qilinadi:

Java
import org.springframework.web.WebApplicationInitializer;
public class MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext appContext = new XmlWebApplicationContext();
        appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }
}
Kotlin
import org.springframework.web.WebApplicationInitializer
class MyWebApplicationInitializer : WebApplicationInitializer {
    override fun onStartup(container: ServletContext) {
        val appContext = XmlWebApplicationContext()
        appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
        val registration = container.addServlet("dispatcher", DispatcherServlet(appContext))
        registration.setLoadOnStartup(1)
        registration.addMapping("/")
    }
}

WebApplicationInitializer — bu Spring MVC tomonidan taqdim etilgan interfeys bo'lib, u sizning amalga oshirilishingizni aniqlash va uni Servlet 3 konteynerini ishga tushirishda avtomatik ravishda ishlatish imkonini beradi. WebApplicationInitializer ning AbstractDispatcherServletInitializer deb atalgan abstrakt sinf amalga oshirishi DispatcherServletni ro'yxatdan o'tkazishni yanada soddalashtirib, servlet xaritalarini va DispatcherServlet konfiguratsiyasi joylashuvini belgilash uchun usullarni qayta belgilaydi.

Bu Java asosidagi Spring konfiguratsiyasidan foydalanadigan dasturlar uchun tavsiya etiladi, quyidagi misolda ko'rsatilganidek:

Java
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { MyWebConfig.class };
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}
Kotlin
class MyWebAppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
    override fun getRootConfigClasses(): Array<Class<*>>? {
        return null
    }
    override fun getServletConfigClasses(): Array<Class<*>>? {
        return arrayOf(MyWebConfig::class.java)
    }
    override fun getServletMappings(): Array<String> {
        return arrayOf("/")
    }
}

Agar XML asosidagi Spring konfiguratsiyasidan foydalanilsa, to'g'ridan-to'g'ri AbstractDispatcherServletInitializer dan kengaytirilishi kerak, quyidagi misolda ko'rsatilganidek:

Java
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
        return cxt;
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}
Kotlin
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
    override fun createRootApplicationContext(): WebApplicationContext? {
        return null
    }
    override fun createServletApplicationContext(): WebApplicationContext {
        return XmlWebApplicationContext().apply {
            setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
        }
    }
    override fun getServletMappings(): Array<String> {
        return arrayOf("/")
    }
}

AbstractDispatcherServletInitializer Filter instansiyalarini qo'shish va ularni avtomatik ravishda DispatcherServletga xaritalash uchun qulay usulni ham taqdim etadi, quyidagi misolda ko'rsatilganidek:

Java
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
    // ...
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] {
            new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
    }
}
Kotlin
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
    // ...
    override fun getServletFilters(): Array<Filter> {
        return arrayOf(HiddenHttpMethodFilter(), CharacterEncodingFilter())
    }
}

Har bir filtr uning aniq turiga asoslangan sukut bo'yicha nom bilan qo'shiladi va avtomatik ravishda DispatcherServletga xaritalanadi.

AbstractDispatcherServletInitializer dagi himoyalangan isAsyncSupported metodi DispatcherServletda va unga xaritalangan barcha filtrlarda asinxronlik qo'llab-quvvatlashni yoqish uchun yagona o'rinni taqdim etadi. Sukut bo'yicha, bu bayroq true ga o'rnatilgan.

Nihoyat, agar DispatcherServletning o'zini qo'shimcha sozlash kerak bo'lsa, createDispatcherServlet metodini qayta belgilash mumkin.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION