Spring MVC, як і багато інших вебфреймворків, розроблений за проєктним шаблоном "єдиної точки входу (front
controller)", де центральний Servlet
, DispatcherServlet
забезпечує загальний алгоритм
обробки запитів, а фактична робота виконується компонентами-делегатами, що налаштовуються. Ця модель є гнучкою та
підтримує різні робочі процеси.
DispatcherServlet
, як і будь-який інший Servlet
, необхідно оголошувати та відображати
відповідно до специфікації сервлетів за допомогою конфігурації Java або у web.xml
. У свою чергу, DispatcherServlet
використовує конфігурацію Spring для виявлення компонентів-делегатів, необхідних для відображення запитів,
розпізнавання уявлень, обробки винятків тощо.
У наступному прикладі конфігурації Java реєструється та ініціалізується DispatcherServlet
, який
автоматично виявляється контейнером сервлетів:
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
// Завантажуємо конфігурацію вебпрограми Spring
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);
// Створюємо та реєструємо DispatcherServlet
DispatcherServlet servlet = новий DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
registration.setLoadOnStartup(1);
registration.addMapping("/app/*");
}
}
class MyWebApplicationInitializer : WebApplicationInitializer {
override fun onStartup(servletContext: ServletContext) {
// Завантажуємо конфігурацію вебпрограми Spring
val context = AnnotationConfigWebApplicationContext()
context.register(AppConfig::class.java)
// Створюємо та реєструємо DispatcherServlet
val servlet = DispatcherServlet(context)
val registration = servletContext.addServlet("app", servlet)
registration.setLoadOnStartup(1)
registration.addMapping("/app/*")
}
}
AbstractAnnotationConfigDispatcherServletInitializer
і перевизначити задані методи.
AnnotationConfigWebApplicationContext
може використовуватися GenericWebApplicationContext
.
Наступний приклад конфігурації web.xml
реєструє та ініціалізує DispatcherServlet
:
<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>
<server-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>
<server-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
Filter
та Servlet
виявляються в конфігурації Spring і реєструються в контейнері сервлетів.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ