我使用WebApplicationInitializer搜索了一些代码,用于no-web.xml配置。
这些代码格式相同。
这是代码块
@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 help doc中看到了第一个代码。但它不适用于码头9。
答案 0 :(得分:1)
您使用的是哪种版本的jetty-9?在jetty-9.0.0.RC3中修复了一个问题(参考:https://bugs.eclipse.org/bugs/show_bug.cgi?id=400312),这意味着将不会调用由这种代码添加的任何侦听器。请尝试使用jetty-9.0.1版本的原始代码。如果它不起作用,请提出错误并在码头问题跟踪器中包含代码示例:https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Jetty
答案 1 :(得分:0)
这是码头的问题。 Jetty无法使用ContextLoaderListener初始化rootContext。
我不知道原因。但是tomcat7现在正在运行。