Java如何获取另一个应用程序的ServletContext?

该ServletContext.getContext(String uripath)使我们部署在同一个应用程序服务器上的其他Web应用程序的访问servlet上下文。需要添加配置以启用此功能。

在下面的示例中,我们将从request当前应用程序转发到/otherapp/hello.jsp页面。我们request在当前应用程序的object属性中放置一个字符串,并将其显示在hello.jsp页面中。

package org.nhooo.example.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = {"/context"})
public class GetAnotherContextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 获取同一Servlet上另一个应用程序的ServletContext
        //容器。这使我们可以将请求转发到另一个应用程序
        // 在同一应用程序服务器上。
        ServletContext ctx = request.getServletContext().getContext("/otherapp");

        // 设置一个请求属性并转发到另一个的hello.jsp页面 
        // 上下文。
        request.setAttribute("MESSAGE", "Hello There!");
        RequestDispatcher dispatcher = ctx.getRequestDispatcher("/hello.jsp");
        dispatcher.forward(request, response);
    }
}

要在Tomcat中启用此功能,我们需要crossContext通过将值设置为来启用属性true,默认值为false。更新server.xml文件以添加以下配置。

...
<Context path="/webapp" debug="0" reloadable="true" crossContext="true"/>
...