问题演示:https ://github.com/paul-hammant/servletDispatcherTest
我试过Tomcat 6和7。
概要:如果您将 conf/context.xml 更改为具有属性“crossContext="true"”,那么一个 war 文件应用程序可以在同一个 Tomcat 实例中利用另一个文件。它有效,但不如预期。
在“a”和“b”上方的演示中,我有两个 WAR 文件 Web 应用程序。每个只有一个 servlet,它输出文本而不是 HTML。事实上,它只是试图打印出当前线程的对象标识。
这是 Tomcat 在尝试访问 /a/ 时在页面上显示的内容
message The requested resource (/b/anything) is not available
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.io.FileNotFoundException: The requested resource (/b/anything) is not available
org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:776)
org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:411)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
servletDispatcherTest.A.doFilter(A.java:31)
A.java 和 B.java 源的快速 URL: https ://github.com/paul-hammant/servletDispatcherTest/blob/master/a/src/main/java/servletDispatcherTest/A.java和 https:// github.com/paul-hammant/servletDispatcherTest/blob/master/b/src/main/java/servletDispatcherTest/B.java
我真的很期待这样的输出:
A thread = 610988429
B thread = 610988429
对 /b/anything 的直接访问按预期工作,如果不是为了尝试分派,对 /a 的访问也是如此:
ServletContext context = httpsr.getSession().getServletContext().getContext("/b");
RequestDispatcher requestDispatcher = context.getRequestDispatcher("/anything");
requestDispatcher.include(request, response);