Я новичок в Spring. Я заметил, что при обработке статических ресурсов доступны два варианта:
Вариант 1:
Если Spring DispatcherServlet
сопоставляется с /
с приведенным ниже кодом, что делает его "Servlet по умолчанию", можно сопоставить определенные статические ресурсы с обработчиками Spring с RequestMapping
аннотация (переопределение класса AbstractAnnotationConfigDispatcherServletInitializer
):
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
Затем мы все же можем включить контейнер "Servlet по умолчанию" для обработки тех статических ресурсов, шаблон URL которых не покрывается Spring отображением запроса (переопределение класса WebMvcConfigurerAdapter
):
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
В основном используется контейнер сервлета "Сервлет по умолчанию" в качестве catch-all для обработки всех статических ресурсов пропущенных Spring DispatcherServlet
.
Вариант 2:
(переопределение класса WebMvcConfigurerAdapter
)
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("*.efi").addResourceLocations("/");
}
- Почему существуют два варианта?
- Каковы основные различия между этими подходами?
- Есть ли другие варианты?
Обычно я беру опцию 2, потому что хочу придерживаться Spring, но я знаю, что это не сильная причина.
Некоторая ссылка, относящаяся к обработке статических ресурсов:
- Подавать статические ресурсы с помощью Spring
- Spring Framework 4.1 - обработка статических веб-ресурсов
- Spring MVC - Как включить JS или CSS файлы на странице JSP
ДОБАВИТЬ 1
Кажется, что вариант 2 обеспечивает гораздо большую гибкость в отношении сопоставления ресурсов. И даже ресурсы в папке WEB-INF
могут быть отображены.