在我的小型Spring MVC项目中,我可以使用web.xml配置调度程序:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>myweb.ApplicationConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我想从web.xml中删除上面的配置,我尝试使用这个类:
@Configuration
@EnableWebMvc
public class ApplicationInitializer implements WebApplicationInitializer {
protected Logger logger = Logger.getLogger(ApplicationInitializer.class);
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
logger.info("Application initialization ...");
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("myweb");
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
logger.info("Application initialized");
}
}
不幸的是,上面的代码不会调用,我不知道为什么。有人可以帮助我,原因可能是什么?
环境:JBoss EAP 6.4,spring位于WAR中的lib文件夹中,位于EAR中
如果我是对的,它应该以这种方式工作:
Spring 中的 SpringServletContainerInitializer 类实现了 ServletContainerInitializer ,并且具有注释 @HandlesTypes(WebApplicationInitializer.class)。在 spring-web.jar 的 META-INF / services 文件夹中,声明此类是服务,应该被调用。使用类作为实现 WebApplicationInitializer 接口的参数调用此类是一个 Servlet 3.0 功能。问题是web容器没有调用 SpringServletContainerInitializer ,我不明白为什么。答案 0 :(得分:0)
你收到任何错误吗?您缺少容器搜索bean所需的组件扫描。
答案 1 :(得分:0)
你有错误“javax.servlet.ServletContainerInitializer:Provider org.springframework.web.SpringServletContainerInitializer不是一个子类型”,如果你想看到错误,你已经把模块org.springframework.spring放在了jboss中