我的目标是使用 tomcat-maven-plugin 部署几个 webapps 并在它们之间进行一些跨上下文交互。这是出于原型设计的目的。所以我创建了两个war模块(核心和webapp1),将apropriate context.xml放入它们的META-INF文件夹并配置tomcat7插件。但是 webapps 是使用默认上下文配置部署的。当部署到通用 Tomcat 7 容器中时,一切正常——我可以访问另一个 webbapp 的上下文。
我的问题是我做错了什么?或者这可能是嵌入式 tomcat 的限制(尽管我没有发现任何区别)?
这是我的 context.xml:
<Context crossContext="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
tomcat插件的配置(不知是否重要,谁知道呢):
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<path>/</path>
<port>8080</port>
<addContextWarDependencies>true</addContextWarDependencies>
<addWarDependenciesInClassloader>true</addWarDependenciesInClassloader> <warSourceDirectory>${project.build.directory}/${project.build.finalName}/</warSourceDirectory>
<webapps>
<webapp>
<groupId>lfcms-several-webapps-proto</groupId>
<artifactId>webapp1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<asWebapp>true</asWebapp>
</webapp>
<webapp>
<groupId>lfcms-several-webapps-proto</groupId>
<artifactId>webapp2</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<asWebapp>true</asWebapp>
</webapp>
</webapps>
</configuration>
</plugin>
这是核心servlet的代码:
final ServletContext additionalContext = ctx.getContext("/webapp1");
if (additionalContext == null) throw new ServletException("can't get context of /webapp1");
final RequestDispatcher disp = additionalContext.getRequestDispatcher("/webapp1");
disp.include(req, resp);