Обучение и трудоустройство Java-программистов от Junior до Senior

Не работает Web configuration в SpringMVC + Apache Tomcat 8.5.20

 
 
 
Сообщения:123
Всем привет. Хочу сказать, что я давно не писал ничего на спринге и за нововведениями не следил.
Проблема в том, что не могу насторить конфиг а именно класс где прописан путь к ресурсам приложения.
В результате приложение запускается, но игнорирует все указанные настройки в этом классе.
Т.е index.jsp грузится только из корня папки а не из /views/ как было указано и ресурсы тоже.
Может кто знает в чем проблема?
Пример кода:
pom.xml
<dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax/javaee-web-api -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>


SpringConfig:
@Configuration
public class SpringConfig implements WebApplicationInitializer {

    public void onStartup(ServletContext sc) throws ServletException {
        WebApplicationContext context = getContext();
        sc.addListener(new ContextLoaderListener(context));
        ServletRegistration.Dynamic servlet = sc.addServlet("DispatcherServlet", new DispatcherServlet(context));
        servlet.setLoadOnStartup(2);
        sc.addFilter("encodingFilter", charsetFilter()).addMappingForUrlPatterns(null, false, "/*");
        servlet.addMapping("/");
    }

    private AnnotationConfigWebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.korablev.config");
        return context;
    }

    private CharacterEncodingFilter charsetFilter() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
        return filter;
    }
}


WebConfig:
@Configuration
@EnableWebMvc
@ComponentScan("com.korablev")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/resources/js/");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}


Заранее благодарен.
 
 
Сообщения:32
попробуй написать /WEB-INF/views/ наверно у тебя папка views там лежит?
 
 
Сообщения:169
@Configuration
public class SpringConfig implements WebApplicationInitializer


а вот тут случаем @Component не надо поставить?

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:123
rusya:
попробуй написать /WEB-INF/views/ наверно у тебя папка views там лежит?

Не. Это не поможет. У меня папка views лежит в корне папки web - вэб модуль приложения. Там всё правильно написано.
 
 
Сообщения:123
MuH3gPaB:
@Configuration
public class SpringConfig implements WebApplicationInitializer


а вот тут случаем @Component не надо поставить?


Не помогает. Вообще файл игнорирует. Даже в консоль ничего не выводит.
 
 
Сообщения:123
Я даже больше скажу. По убирал все аннотации и методы из классов конфига. Осталось только два пустых класса без аннотаций. И ничего не изменилось. Всё так же грузится и работает и index.jsp видит только если он лежит в рут каталоге.
WTF??
 
 
Сообщения:169
А ты какой сервлет контейнер используешь?

И как ему это дело скармливаешь?
web.xml или ServletInitializer?

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:169
Может надо в конфиге добавить SpringServletContainerInitializer?

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:123
MuH3gPaB:
Может надо в конфиге добавить SpringServletContainerInitializer?

Не пойму о чем вы? Объясните.
Конфиг и зависимости мавена я указал в первом посте.
 
 
Сообщения:169
Класс SpringServletContainerInitializer как раз ищет в CP реализации WebApplicationInitializer и передает им контекст для инициализации.

Не уверен, что спринг самовольно создаст объект класса SpringServletContainerInitializer.
Может быть надо создать его руками? а именно добавить в класс WebConfig бин этого типа:

@Bean
public SpringServletContainerInitializer springServletContainerInitializer() {
   return new SpringServletContainerInitializer();
}



К сожалению нет IDE под рукой, чтобы проверить =(

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:123
@Bean
public SpringServletContainerInitializer springServletContainerInitializer() {
   return new SpringServletContainerInitializer();
}


Попробовал, не помогло.
У меня такое ощущение, что спринг на конфиги вообще не смотрит. Есть они или нет их, результат всегда один.

ПС. Работаю в IntelliJ Idea, может проблемы в IDE?
Изменен:14 авг 2017 10:26
 
 
Сообщения:169
Посмотрел в доках, должно само все создаваться, если в зависимостях есть spring-web (а он должен подтягиваться от spring-webmvc).

Может быть дело в томкате?

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:123
MuH3gPaB:

Может быть дело в томкате?


Попробую страую версию томката. Может и поможет.
 
 
Сообщения:123
MuH3gPaB:

К сожалению нет IDE под рукой, чтобы проверить =(


Какой ты IDE пользуешься? Не IntelliJ Idea случайно?
Я думаю может проблема кроется в настройках проекта в IDE?
Изменен:14 авг 2017 14:33
 
 
Сообщения:169
Да, Intellij Ultimate

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет