子项目中的WebApplicationInitializer

时间:2015-09-11 13:41:01

标签: java maven spring-mvc tomcat spring-annotations

我正在使用 Spring MVC Maven 创建一个webapp项目。我还使用Spring注释驱动配置。

我想创建一个父项目,其中包含我的容器的所有SpringMVC配置和ServletContext侦听器。然后,我的所有Web项目都将依赖于此项目,以便使用Spring MVC进行初始化。

我的基础项目中也有ZK框架,但我觉得这很好。

所以我有以下课程:

基础项目:

public class DefaultInitializer implements WebApplicationInitializer {

    private Class<?> config = BaseConfig.class;

    public void onStartup(ServletContext container) throws ServletException {
    init();

        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(config);

        // Manage the lifecycle of the root application context
        container.addListener(new ContextLoaderListener(rootContext));

        // Create the dispatcher servlet's Spring application context
        AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
        dispatcherServlet.register(MvcConfig.class);

        // Register and map the dispatcher servlets
        ServletRegistration.Dynamic dispatcher = container.addServlet(
            "dispatcher", new DispatcherServlet(dispatcherServlet));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        ServletRegistration.Dynamic zkDispatcher = container.addServlet(
            "zkLoader", new DHtmlLayoutServlet());
        zkDispatcher.setLoadOnStartup(1);
        zkDispatcher.setInitParameter("update-uri", "/zkau");
        zkDispatcher.addMapping("*.zul");

        ServletRegistration.Dynamic zkUpdater = container.addServlet(
            "auEngine", new DHtmlUpdateServlet());
        zkUpdater.addMapping("/zkau/*");
    }

    protected void setConfig(Class<?> config){
        this.config = config;
    }

    protected void init(){
        setConfig(BaseConfig.class);
    }

}

Webapp项目:

public class Initializer extends DefaultInitializer{

    protected void init(){
        setConfig(WebConfig.class);
    }

}

这些是基础项目

中的web.xml和mvc-config
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     id="WebApp_ID" version="2.5">

<display-name>base-config</display-name>

</web-app>


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- Uncomment and your base-package here:
         <context:component-scan
            base-package="org.springframework.samples.web"/>  -->

    <mvc:annotation-driven />

</beans>

这些是 webapp项目

中的web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     id="WebApp_ID" version="2.5">

    <display-name>web-project</display-name>

</web-app>

我检查过如果我在tomcat中运行我的基础项目它运行正常,但是当我尝试运行web应用程序项目(对我的基础项目有一个pom依赖项)时,它不会调用onStartup方法。 / p>

我做错了什么?

谢谢。

编辑:

运行我的服务器时也有这个输出

在类路径上检测不到Spring WebApplicationInitializer类型

1 个答案:

答案 0 :(得分:0)

嗯,终于可行了。

我不确定它是什么,但我做了以下步骤:

  • 将Base Project pom包装改为&#39; jar&#39;并将其作为依赖项导入
  • 清理tomcat服务器

在我的研究中,我学到了一些东西,所以如果发生这种情况,请查看:

  • 父pom can't be packaging jar,因此无法获得源代码
  • 检查类路径中是否有更多具有不同版本的WebApplicationInitializer类。 +info