1

問題のデモ: https://github.com/paul-hammant/servletDispatcherTest

Tomcat 6 と 7 を試しました。

概要: conf/context.xml を属性 'crossContext="true"' を持つように変更すると、1 つの war ファイル アプリが同じ Tomcat インスタンス内で別のアプリを利用できるようになります。動作しますが、期待どおりではありません。

上記の「a」と「b」のデモには、2 つの WAR ファイル Web アプリがあります。HTML ではなくテキストを吐き出すサーブレットは、それぞれに 1 つだけです。実際、現在のスレッドのオブジェクト ID を出力しようとするだけです。

/a/にアクセスしようとしたときにTomcatがページに出力するものは次のとおりです

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);
4

0 に答える 0