JavaRush /Kurslar /All lectures for UZ purposes /Kontekstlar Iyerarxiyasi

Kontekstlar Iyerarxiyasi

All lectures for UZ purposes
Daraja, Dars
Mavjud

DispatcherServlet o'zining konfiguratsiyasi uchun WebApplicationContext (oddiy ApplicationContext kengaytmasi) kutadi. WebApplicationContext ServletContext va u bilan bog'langan Servletga ishorat saqlaydi. Shuningdek, u ServletContext bilan bog'liq, shuning uchun ilovalar WebApplicationContextga kirish zarur bo'lsa, uni topish uchun RequestContextUtilsning statik metodlaridan foydalanishlari mumkin.

Ko'pgina ilovalar uchun bitta WebApplicationContext yetarli. Shuningdek, bir qator DispatcherServlet (yoki boshqa Servlet) nusxalari bilan birga tashkillashtirilgan iyerarxik kontekstlar bo'lishi mumkin, har biri o'zining maxsus WebApplicationContext konfiguratsiyasiga ega.

Iyerarxiyadagi asosiy WebApplicationContext odatda bir nechta Servlet nusxalari uchun umumiy bo'lishi kerak bo'lgan infratuzilma binlar (ma'lumotlar omborlari va biznes xizmatlar kabi)ni o'z ichiga oladi. Bu binlar samarali ravishda meros qilib olinadi va kerak bo'lsa, Servletga xos bo'lgan, lokal binlarni saqlaydigan farzand WebApplicationContextda qayta e'lon qilish (ya'ni, qayta yaratish) mumkin. Quyidagi rasmda bu o'zaro bog'liqlik ko'rsatilgan:

Quyidagi misol WebApplicationContext iyerarxiyasini konfiguratsiyalashni ko'rsatadi:

Java
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { App1Config.class };
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/app1/*" };
    }
}
Kotlin
class MyWebAppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
    override fun getRootConfigClasses(): Array<Class<*>> {
        return arrayOf(RootConfig::class.java)
    }
    override fun getServletConfigClasses(): Array<Class<*>> {
        return arrayOf(App1Config::class.java)
    }
    override fun getServletMappings(): Array<String> {
        return arrayOf("/app1/*")
    }
}
Agar iyerarxik kontekstlarga ehtiyoj bo'lmasa, ilovalar barcha konfiguratsiyani getRootConfigClasses() orqali qaytarishi va getServletConfigClasses()dan nullni qaytarishi mumkin.

Quyidagi misolda web.xmlning ekvivalenti ko'rsatilgan:

<web-app>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>app1</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/app1-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>app1</servlet-name>
        <url-pattern>/app1/*</url-pattern>
    </servlet-mapping>
</web-app>
Agar ilovalar iyerarxik kontekstlarga ehtiyoj sezmasa, faqat "asosiy" kontekstni konfiguratsiyalashtirishi va servlet parametrini contextConfigLocation ni bo'sh qoldirishi mumkin.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION