问题演示:https://github.com/paul-hammant/servletDispatcherTest
我尝试过Tomcat 6和7.
概要:如果你改变conf / context.xml以使属性'crossContext =“true”',那么一个war文件应用可以在同一个Tomcat实例中利用另一个。它有效,但不如预期。
我在'a'和'b'上面的演示中有两个WAR文件网络应用程序。每个只有一个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 / any的直接访问可以按预期工作,如果不是为了尝试发送,可以访问/ a:
ServletContext context = httpsr.getSession().getServletContext().getContext("/b");
RequestDispatcher requestDispatcher = context.getRequestDispatcher("/anything");
requestDispatcher.include(request, response);