Java ServletDispatcher crossContext无法按预期为Tomcat工作

时间:2013-06-28 12:06:21

标签: tomcat servlets

问题演示: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.javahttps://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);

0 个答案:

没有答案