¿RequestDispatcher funciona en varias aplicaciones web en un contenedor de servlets?

¿RequestDispatcher funciona en varias aplicaciones web?

Lo pregunto porque tenía una sola aplicación web funcionando bien que usa RequestDispatcher en lugar de redireccionar para que el estado no se pierda al mostrar mensajes de error y comentarios.

Sin embargo, ahora necesito dividir algunas funcionalidades entre dos aplicaciones web, por lo que la llamada inicial se realiza desde una página web alojada en webapp1, llamada webapp2 que finalmente devuelve al usuario a una página alojada en webapp1.

Claramente, si webapps y webapp2 estuvieran en sitios web diferentes utilizando RequestDispatcher, no sería posible, pero es si ambas webapps se implementan en la misma instancia de un contenedor de servlets (tomcat 7)

Actualizar

Conseguí que la parte del despachador de solicitudes funcionara como se explica en la respuesta, pero no puedo recuperar los datos colocados en mi aplicación web, por lo que no puedo usarlos

es decir

Se llama webapp2, se procesa un poco y luego se envía a un jsp en webapp1

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
{

    HttpSession userSession = request.getSession(true);
    String emailAddress = ......
    String nextPage     = /finish.jsp
    userSession.setAttribute("DATA", emailAddress);
    ServletContext otherContext = getServletContext().getContext("/webapp1");
    otherContext.getRequestDispatcher(nextPage).forward(request, response); 
}

El archivo jsp webapp2 contiene

...
<p>Email(<%=((String)session.getAttribute("DATA"))%>)</p>
...

pero siempre muestra nulo

 Actualización 2 **

Me pregunto si no estoy entendiendo lo que realmente hace crossContext = "true". ¿Hace que la misma HttpSession esté disponible en diferentes aplicaciones web, o simplemente hace que el ServletContext de una aplicación web esté disponible para otra y, por lo tanto, permita que una aplicación web vea las HttpSessions de otra aplicación web?

Estoy empezando a pensar que lo que estoy haciendo es una mala idea, ya que siempre he estado interesado en utilizar configuraciones de servlet de vainilla y nunca quiero atarme a una implementación en particular. Creo que podría ayudar si explico por qué sugiero la necesidad de dividir las aplicaciones web en primer lugar.

Tenía una aplicación web (webapp1), que era un sitio web sobre un producto que desarrollo y código para comprar ese producto utilizando Google Checkout (ahora Google Wallet).

Luego agregué creado una nueva aplicación web para un nuevo producto (webapp2).

Luego traté de agregar Google Checkout para el nuevo producto en webapp2, pero me di cuenta de que no podía hacer esto fácilmente porque Google Checkout requiere que le proporcione una URL a la que pueda llamar por aplicación una vez que haya procesado el pago para que luego pueda enviar al usuario un licencia. La url ya estaba configurada en un servlet en webapp1, pero no tendría sentido que webapp1 procesara los pagos para el producto 2.

Una opción era fusionar webpp1 y webapp2 en una aplicación web, pero esto va en contra de mi opinión general de mantener las cosas modulares, también significaría que cada vez que quisiera hacer cambios para un producto, tengo que volver a implementar todo. También significó grandes modificaciones a la aplicación web1 que realmente no quería modificar ya que estaba funcionando y estable.

La alternativa fue crear webapp3 y luego google url puede apuntar a esto, y usarlo para procesar las compras del producto 1 y del producto 2, que es lo que he hecho. Pero el problema es que al comprar el producto 1, la página de inicio está en webapp1, y una vez que se realiza la compra, quiero volver a una página de webapp1, pero solo webapp3 tiene los detalles del usuario que acaba de realizar la compra que quería. para mostrar en la página en webapp1.

Respuestas a la pregunta(3)

Su respuesta a la pregunta