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/*")
}
}
AbstractAnnotationConfigDispatcherServletInitializer
ni kengaytirish va aniqlangan usullarni qayta aniqlash ham mumkin.
AnnotationConfigWebApplicationContext
o'rniga
GenericWebApplicationContext
ishlatish mumkin.
Quyidagi web.xml
konfiguratsiya misoli DispatcherServlet
ni 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