Добрый день!
В документации по Spring Boot 3.5.3 сказано:
Any Servlet, Filter, or servlet *Listener instance that is a Spring bean is registered with the embedded container.
Пытаюсь зарегистрировать два Servlet во встроенном контейнере:
package com.springbootapp.main;
@SpringBootApplication(exclude= {DispatcherServletAutoConfiguration.class, ErrorMvcAutoConfiguration.class})
public class NewSpringBootAppApplication {
public static void main(String[] args) {
SpringApplication.run(NewSpringBootAppApplication.class, args);
}
@Bean
public Servlet servletOne()
{
DispatcherServlet dispatcherServlet = new DispatcherServlet();
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(ConfigOne.class);
dispatcherServlet.setApplicationContext(applicationContext);
return dispatcherServlet;
}
@Bean
public Servlet servletTwo()
{
DispatcherServlet dispatcherServlet = new DispatcherServlet();
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(ConfigTwo.class);
dispatcherServlet.setApplicationContext(applicationContext);
return dispatcherServlet;
}
}
package dispOne;
@Configuration
@ComponentScan
@EnableWebMvc
public class ConfigOne {
}
package dispOne;
@Controller
@RequestMapping("/")
public class ControllerOne {
@GetMapping("/")
String getIndex()
{
System.out.println("ControllerOne getIndex");
return "indexOne";
}
}
Классы ConfigTwo и ControllerTwo лежат в пакете dispTwo и аналогичны, за исключением, что в ControllerTwo возвращается indexTwo.
View лежат в resources/templates/.
По итогу выдает ошибку 404. Методы контролера вообще не вызываются, т.к. в консоль не выводятся сообщения из этих методов.
В консоли такой вывод:
- GET "/servletOne/", parameters={}, headers={masked} in DispatcherServlet 'servletOne'
- Mapped to HandlerExecutionChain with [ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]] and 3 interceptors
- Resource not found
- [NewSpringBootApp] [nio-8080-exec-1] Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource servletOne.]
- No view rendering, null ModelAndView returned.
- Completed 404 NOT_FOUND, headers={masked}