W mojej aplikacji wiosny, mam następujące klasy konfiguracyjne dla środowiska wiosny:Praca z wieloma dyspozytorski serwletów w aplikacji wiosny
WebAppInitializer.java
@Order(value=1)
public class WebAppInitializer implements WebApplicationInitializer {
@SuppressWarnings("resource")
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(WebAppConfig.class);
// Manage the lifecycle of the root application context
//container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
WebAppConfig.java
@EnableWebMvc
@EnableTransactionManagement(mode=AdviceMode.PROXY, proxyTargetClass=true)
@ComponentScan(value="spring.webapp.lojavirtual")
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/bootstrap/**").addResourceLocations("/bootstrap/").setCachePeriod(31556926);
registry.addResourceHandler("/extras/**").addResourceLocations("/extras/").setCachePeriod(31556926);
registry.addResourceHandler("/jquery/**").addResourceLocations("/jquery/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
DispatcherConfig.java
@Controller
@Import(WebAppConfig.class)
public class DispatcherConfig {
@Bean
public ViewResolver jspResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
Chcę dodać inne dyspozytora serwletu do mojego wniosku. Mój pierwszy pomysł był osioł następujący kod do klas wyżej:
W WebAppInitializer.java
nowy blok w ten sposób, zmiana nazwy w odpowiednich miejscach:
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
i dodaj nowa klasa, taka jak DispatcherConfig.java, z nazwą wybraną w powyższym kodzie.
Moje pytania są następujące:
1) Przede wszystkim, moje podejście jest właściwym sposobem na dodanie nowego dyspozytora serwletu?
2) Po drugie, jeśli odpowiedź na pytanie 1 brzmi "tak", jakie nazwy powinienem zmienić w WebAppInitializer?
3) W moim kontrolerze (ach), w jaki sposób mogę zaaplikować, dla którego serwletu dyspozytora moje zamówienie powinno zostać wysłane? Moi kontrolerzy stosowanie metod jak na poniższym dla wywołania widoku:
@RequestMapping(value="view_mapping")
public method() {
ModelAndView mav = new ModelAndView()
mav.setViewName("view_name");
return mav;
}
Prawie zawsze nie powinieneś mieć wielu serwletów, a zamiast tego musisz dodać wszystkie mapowania do jednej. Dlaczego uważasz, że potrzebujesz więcej? – chrylis