Code, damit ein Java-Servlet als Proxy fungiert?
Ich habe zwei Java-Webanwendungen mit einem einzelnen Servlet, das einer bestimmten URL zugeordnet wird:
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)
Ich möchte diese Anwendung (ich bezeichne sie als meine "Backend-Apps") hinter eine "Proxy-App" (Servlet) stellen, die entscheidet, welche dieser beiden Apps letztendlich eine clientseitige Anfrage bearbeitet.
Diese Proxy-Web-App nimmt eine eingehende HTTP-Anfrage entgegen und bestimmt, auf welche der 2 "Backend-Apps" (rot oder blau) die Anfrage weitergeleitet werden soll. Die Anfrage wird dann an eine der beiden weitergeleitethttp://red.example.com/doStuff
(und dann bearbeitet vonRedServlet#doGet(...)
) oderhttp://blue.example.com/doStuff
(und dann bearbeitet vonBlueServlet#doGet(...)
). Die zurückgegebene Antwort von der Backend-App (auch hier entwederRedServlet#doGet(...)
oderBlueServlet#doGet(...)
) würde dann an das Proxy-Servlet und schließlich an den Client zurückgegeben.
Mit anderen Worten, im Pseudocode:
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...
}
}
Ist das möglich? Wenn ja, wie und welchen Code müsste ich schreiben, damit es funktioniert?