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:
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/*");
}
}
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/*")
}
}
AbstractAnnotationConfigDispatcherServletInitializerni kengaytirish va aniqlangan usullarni qayta aniqlash ham mumkin.
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>
Filter va
Servlet e'lonlari Spring konfiguratsiyasida aniqlanadi va servletlar konteyneriga ro'yxatdan o'tkaziladi.
GO TO FULL VERSION