Spring MVC не видит страничек - 404
Как настроить MVC?
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@EnableWebMvc
@Configuration
@ComponentScan("com.example")
public class WebAppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{WebAppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{ViewsConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Bean
public BCryptPasswordEncoder encoder() {
return new BCryptPasswordEncoder(12);
}
}
=========================================
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceView;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@Configuration
public class ViewsConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(InternalResourceView.class);
resolver.setPrefix("");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("/WEB-INF/views/login");
registry.addViewController("/register").setViewName("/WEB-INF/views/register");
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.viewResolver(viewResolver());
}
}
Вылетает с ошибкой 404
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
В текущей конфигурации есть как минимум одна большая проблема с тем как задается конфигурация view, а именно путь к html файлам.
setViewName задает URL path, т.е. часть URL так, как его вводите в браузере. Т.е. если полный URL для страницы - http://localhost:8080/login, то указывать имя нужно так:
registry.addViewController("/login").setViewName("login");
А вот место, где в webapp находяться файлы указывается в InternalResourceViewResolver:
resolver.setPrefix("/WEB-INF/views/");
