我已经使用 WebApplicationInitializer 搜索了一些用于 no-web.xml 配置的代码。
这些代码格式相同。
- 创建根上下文
- 创建 ContextLoaderListener
- 将侦听器注册到 servlet
这是代码块
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
registerListener(servletContext);
registerDispatcherServlet(servletContext);
}
private void registerListener(ServletContext servletContext) {
AnnotationConfigWebApplicationContext rootContext = createContext(DomainConfiguration.class);
ContextLoaderListener contextLoaderListener = new ContextLoaderListener(rootContext);
servletContext.addListener(contextLoaderListener);
servletContext.addListener(new RequestContextListener());
}
private void registerDispatcherServlet(ServletContext servletContext) {
AnnotationConfigWebApplicationContext dispatcherContext = createContext(WebMvcContexConfiguration.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet(DISPATCHER_SERVLET_NAME,
new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
private AnnotationConfigWebApplicationContext createContext(final Class<?>... annotatedClasses) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(annotatedClasses);
return context;
}
但是,此代码不起作用。它无法在根上下文中找到上下文对象。所以,我改变了一些代码,它正在工作。
这是工作代码。
private void registerListener(ServletContext servletContext) {
AnnotationConfigWebApplicationContext rootContext = createContext(DomainConfiguration.class);
ContextLoaderListener contextLoaderListener = new ContextLoaderListener(rootContext);
// This is changed code!!
contextLoaderListener.initWebApplicationContext(servletContext);
servletContext.addListener(new RequestContextListener());
}
这样对吗?我在 spring 帮助文档中看到了第一个代码。但它不适用于jetty 9。