Dasturlar so'rovlarni qayta ishlash uchun zarur bo'lgan infratuzilmaviy binlar deklaratsiya qilishi mumkin. DispatcherServlet har bir maxsus bin uchun WebApplicationContext ni tekshiradi. Agar mos keladigan bin turlari mavjud bo'lmasa, unda DispatcherServlet.properties faylida keltirilgan sukut bo'yicha turlar ishlatiladi.
Ko'p hollarda, MVC Config boshlash uchun eng yaxshi nuqta hisoblanadi. U Java yoki XMLda zarur binlarni e'lon qiladi va ularni sozlash uchun yuqori darajadagi konfiguratsiya qayta chaqiruv API ni taqdim etadi.
1.1.4. Servletlarni Konfiguratsiyasi
Servlet 3.0+ muhitida web.xml faylga alternativ yoki uni birgalikda servlet konteynerini dasturiy ravishda sozlash imkoniyati mavjud. Quyidagi misolda DispatcherServlet registratsiya qilinadi:
import org.springframework.web.WebApplicationInitializer;
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
import org.springframework.web.WebApplicationInitializer
class MyWebApplicationInitializer : WebApplicationInitializer {
override fun onStartup(container: ServletContext) {
val appContext = XmlWebApplicationContext()
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
val registration = container.addServlet("dispatcher", DispatcherServlet(appContext))
registration.setLoadOnStartup(1)
registration.addMapping("/")
}
}
WebApplicationInitializer — bu Spring MVC tomonidan taqdim etilgan interfeys bo'lib, u sizning amalga oshirilishingizni aniqlash va uni Servlet 3 konteynerini ishga tushirishda avtomatik ravishda ishlatish imkonini beradi. WebApplicationInitializer ning AbstractDispatcherServletInitializer deb atalgan abstrakt sinf amalga oshirishi DispatcherServletni ro'yxatdan o'tkazishni yanada soddalashtirib, servlet xaritalarini va DispatcherServlet konfiguratsiyasi joylashuvini belgilash uchun usullarni qayta belgilaydi.
Bu Java asosidagi Spring konfiguratsiyasidan foydalanadigan dasturlar uchun tavsiya etiladi, quyidagi misolda ko'rsatilganidek:
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
class MyWebAppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
override fun getRootConfigClasses(): Array<Class<*>>? {
return null
}
override fun getServletConfigClasses(): Array<Class<*>>? {
return arrayOf(MyWebConfig::class.java)
}
override fun getServletMappings(): Array<String> {
return arrayOf("/")
}
}
Agar XML asosidagi Spring konfiguratsiyasidan foydalanilsa, to'g'ridan-to'g'ri AbstractDispatcherServletInitializer dan kengaytirilishi kerak, quyidagi misolda ko'rsatilganidek:
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
override fun createRootApplicationContext(): WebApplicationContext? {
return null
}
override fun createServletApplicationContext(): WebApplicationContext {
return XmlWebApplicationContext().apply {
setConfigLocation("/WEB-INF/spring/dispatcher-config.xml")
}
}
override fun getServletMappings(): Array<String> {
return arrayOf("/")
}
}
AbstractDispatcherServletInitializer Filter instansiyalarini qo'shish va ularni avtomatik ravishda DispatcherServletga xaritalash uchun qulay usulni ham taqdim etadi, quyidagi misolda ko'rsatilganidek:
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
// ...
@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
}
}
class MyWebAppInitializer : AbstractDispatcherServletInitializer() {
// ...
override fun getServletFilters(): Array<Filter> {
return arrayOf(HiddenHttpMethodFilter(), CharacterEncodingFilter())
}
}
Har bir filtr uning aniq turiga asoslangan sukut bo'yicha nom bilan qo'shiladi va avtomatik ravishda DispatcherServletga xaritalanadi.
AbstractDispatcherServletInitializer dagi himoyalangan isAsyncSupported metodi DispatcherServletda va unga xaritalangan barcha filtrlarda asinxronlik qo'llab-quvvatlashni yoqish uchun yagona o'rinni taqdim etadi. Sukut bo'yicha, bu bayroq true ga o'rnatilgan.
Nihoyat, agar DispatcherServletning o'zini qo'shimcha sozlash kerak bo'lsa, createDispatcherServlet metodini qayta belgilash mumkin.
GO TO FULL VERSION