未检测到WebApplicationInitializer

时间:2017-01-25 15:25:24

标签: spring spring-mvc servlet-3.0

在我的小型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 ,我不明白为什么。

2 个答案:

答案 0 :(得分:0)

你收到任何错误吗?您缺少容器搜索bean所需的组件扫描。

答案 1 :(得分:0)

你有错误“javax.servlet.ServletContainerInitializer:Provider org.springframework.web.SpringServletContainerInitializer不是一个子类型”,如果你想看到错误,你已经把模块org.springframework.spring放在了jboss中