DispatcherServlet

All lectures for UZ purposes
Daraja , Dars
Mavjud

Spring MVC ko'pgina boshqa web-frameworklar singari "front controller" dizayn patterni asosida ishlab chiqilgan bo'lib, bu yerda markaziy Servlet, DispatcherServlet, so'rovlarni qayta ishlashning umumiy algoritmini ta'minlaydi, va asl ish moslashtiriladigan komponent-delegatlar orqali bajariladi. Ushbu model moslashuvchan bo'lib, turli xil ish jarayonlarini qo'llab-quvvatlaydi.

DispatcherServlet, boshqa har qanday Servlet kabi, Java konfiguratsiyasi yoki web.xml orqali servletlar spetsifikatsiyasiga muvofiq e'lon qilinishi va xaritalanishi kerak. O'z navbatida, DispatcherServlet Spring konfiguratsiyasidan foydalanib, so'rovlarni xaritalash, ko'rinishlarni aniqlash, istisnolarni qayta ishlash va boshqalar uchun kerakli komponent-delegatlarni aniqlaydi.

Quyidagi Java konfiguratsiya misolida DispatcherServlet ro'yxatga olinadi va servletlar konteyneri tomonidan avtomatik aniqlanadi:

Java
public class MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) {
        // Spring veb-ilovasini yuklaymiz
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(AppConfig.class);
        // DispatcherServlet yaratamiz va ro'yxatdan o'tkazamiz
        DispatcherServlet servlet = new DispatcherServlet(context);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}
Kotlin
class MyWebApplicationInitializer : WebApplicationInitializer {
    override fun onStartup(servletContext: ServletContext) {
        // Spring veb-ilovasini yuklaymiz
        val context = AnnotationConfigWebApplicationContext()
        context.register(AppConfig::class.java)
        // DispatcherServlet yaratamiz va ro'yxatdan o'tkazamiz
        val servlet = DispatcherServlet(context)
        val registration = servletContext.addServlet("app", servlet)
        registration.setLoadOnStartup(1)
        registration.addMapping("/app/*")
    }
}
ServletContext API-ni to'g'ridan-to'g'ri ishlatishdan tashqari, AbstractAnnotationConfigDispatcherServletInitializerni kengaytirish va aniqlangan usullarni qayta aniqlash ham mumkin.
Dasturiy foydalanish holatlari uchun AnnotationConfigWebApplicationContext o'rniga GenericWebApplicationContext ishlatish mumkin.

Quyidagi web.xml konfiguratsiya misoli DispatcherServletni ro'yxatdan o'tkazadi va ishga tushiradi:

<web-app>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/app-context.xml</param-value>
    </context-param>
    <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>/app/*</url-pattern>
    </servlet-mapping>
</web-app>
Spring Boot boshqacha ishga tushirish ketma-ketligiga amal qiladi. Servletlar konteynerining hayot aylanishiga bog'lanish o'rniga, Spring Boot dastlabki yuklash va o'rnatilgan servletlar konteynerini boshlash uchun Spring konfiguratsiyasidan foydalanadi. Filter va Servlet e'lonlari Spring konfiguratsiyasida aniqlanadi va servletlar konteyneriga ro'yxatdan o'tkaziladi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION