Código para obter um servlet Java para atuar como um proxy?
Eu tenho dois aplicativos da Web Java que possuem um único servlet que é mapeado para uma URL específica:
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)
Eu quero colocar esses aplicativos (estou chamando-os de meus "aplicativos de back-end") por trás de um "aplicativo de proxy" (servlet) que decidirá qual desses dois aplicativos acabará atendendo a uma solicitação do lado do cliente.
Esse aplicativo da Web de proxy receberia uma solicitação HTTP de entrada e determinaria quais dos dois "aplicativos de back-end" (vermelho ou azul) para encaminhar a solicitação. O pedido seria então encaminhado parahttp://red.example.com/doStuff
(e depois processado porRedServlet#doGet(...)
) ouhttp://blue.example.com/doStuff
(e depois processado porBlueServlet#doGet(...)
). A resposta retornada do aplicativo de backend (novamente,RedServlet#doGet(...)
ouBlueServlet#doGet(...)
) seria então retornado ao servlet proxy e, finalmente, retornado ao cliente.
Em outras palavras, no pseudo-código:
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...
}
}
Isso é possível? Em caso afirmativo, como e qual código eu precisaria escrever para que funcionasse?