【发布时间】:2013-05-30 01:21:59
【问题描述】:
我有两个 Java Web 应用程序,它们有一个映射到特定 URL 的 servlet:
red.war/
WEB-INF/classes
com.me.myorg.red.RedServlet (maps to http://red.example.com/doStuff)
blue.war/
WEB-INF/classes
com.me.myorg.blue.BlueServlet (maps to http://blue.example.com/doStuff)
我想将这些应用程序(我称它们为我的“后端应用程序”)放在一个“代理应用程序”(servlet)后面,该代理应用程序将决定这两个应用程序中的哪一个最终将为客户端请求提供服务。
此代理 Web 应用将接收传入的 HTTP 请求,并确定将请求转发到 2 个“后端应用”(红色或蓝色)中的哪一个。然后该请求将被转发到http://red.example.com/doStuff(然后由RedServlet#doGet(...) 处理)或http://blue.example.com/doStuff(然后由BlueServlet#doGet(...) 处理)。然后从后端应用返回的响应(同样是RedServlet#doGet(...) 或BlueServlet#doGet(...))将返回到代理servlet,并最终返回到客户端。
换句话说,在伪代码中:
public class ProxyServlet extends HttpServlet {
@Override
public doGet(HttpServletRequest request, HttpServletResponse response) {
String forwardingAddress;
if(shouldBeRed(request))
forwardingAddress = "http://red.example.com/doStuff";
else
forwardingAddress = "http://blue.example.com/doStuff";
PrintWriter writer = response.getWriter();
writer.write(getResponseFromBackend(forwardingAddress, request));
}
private String getResponseFromBackend(String addr, HttpServletRequest req) {
// Somehow forward req to addr and get HTML response...
}
}
这可能吗?如果可以,我需要如何以及编写什么代码才能使其工作?
【问题讨论】:
-
我们使用j2ep...
-
你需要向后端服务器发出HTTP请求,看看hc.apache.org/httpcomponents-core-ga/httpcore/index.html
-
还可以查看 HTTP-Proxy-Servlet 问题 #15 (github.com/mitre/HTTP-Proxy-Servlet/issues/15) 以获取完整示例。
标签: java http servlets web-applications reverse-proxy