Ошибка 404 при запуске Spring MVC на Tomcat 10
Помогите пожалуйста решить проблему. Создал приложение на Spring MVC с подключением к серверу Tomcat 10. При переходе на любую страницу выдаёт ошибку 404. webapp в структуре проекта в модулях как WEB установлен, пробовал Spring 5 с Tomcat 9 и менял всё на javaх - тоже не помогло. Запускал с Coverage - там в контроллере - 0%, т.е. туда даже не попадает приложение.
UserContoller
@Controller
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping()
public String index(Model model) {
model.addAttribute("users", userService.index());
return "users";
}
@GetMapping("/{id}")
public String show(@PathVariable("id") int id, Model model) {
model.addAttribute("user", userService.show(id));
return "show";
}
@GetMapping("/new")
public String newUser(Model model){
model.addAttribute("user", new User());
return "new";
}
@PostMapping()
public String add(@ModelAttribute("user") User user) {
userService.add(user);
return "redirect:/users";
}
@GetMapping("/{id}/edit")
public String edit(Model model, @PathVariable("id") int id) {
model.addAttribute("user", userService.show(id));
return "edit";
}
@PatchMapping("/{id}")
public String update(@ModelAttribute("user") User user, @PathVariable("id") int id) {
userService.update(id, user);
return "redirect:/users";
}
@DeleteMapping("/{id}")
public String remove(@PathVariable("id") int id) {
userService.remove(id);
return "redirect:/users";
}
WebConfig
@EnableWebMvc
@Configuration
@ComponentScan("java")
public class WebConfig implements WebMvcConfigurer {
private final ApplicationContext applicationContext;
public WebConfig(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/pages/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
AppInit
public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{
WebConfig.class
};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.dexason.ppkatastudent</groupId>
<artifactId>PP_2_3_1_spring-mvc-crud</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>PP_2_3_1_spring-mvc-crud Maven Webapp</name>
<properties>
<spring.version>6.0.7</spring.version>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring6</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.1.7.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Сам проект на GitHub: https://github.com/Dexason/PP_2_3_1_spring-mvc-crud
Ответы (1 шт):
Автор решения: Dexason
→ Ссылка
Решение нашлось: нужно было всего лишь все пакеты поместить в ещё один пакет общий внутри пакета "java", ибо без него Spring не видел контроллеры.
