У меня есть два веб-приложения Java, которые имеют один сервлет, который сопоставляется с определенным URL-адресом:
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)
Я хочу поместить это приложение (я называю их своими "бэкэнд-приложениями" ) за "прокси-приложение" (сервлет), которые решат, какое из этих двух приложений будет в конечном счете обслуживать клиентский запрос.
Это прокси-приложение будет принимать входящий HTTP-запрос и определяет, какое из двух "бэкэнд-приложений" (красного или синего) отправляет запрос. Затем запрос будет перенаправлен на http://red.example.com/doStuff
(а затем обрабатывается RedServlet#doGet(...)
) или http://blue.example.com/doStuff
(а затем обрабатывается BlueServlet#doGet(...)
). Возвращенный ответ из бэкэнд-приложения (опять же, RedServlet#doGet(...)
или BlueServlet#doGet(...)
) затем будет возвращен в сервлет-прокси и в конечном итоге возвращается клиенту.
Другими словами, в псевдокоде:
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...
}
}
Возможно ли это? Если да, как и какой код мне нужно написать, чтобы заставить его работать?