我有有被映射到特定的URL,單個Servlet兩個Java Web應用程序:獲取Java 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://j2ep.sourceforge.net/)... – Lucas
你需要向後端服務器做一個HTTP請求,看一看在http://hc.apache.org/httpcomponents-core-ga/httpcore/index.html – Woody
我已經嘗試https://github.com/dsmiley/HTTP-Proxy-Servlet,並發現它體面 – Chris