典型的代理/聚合模式:客戶端 → Servlet(S1) → 遠程服務(S2) → 返回響應。
Client --HTTP請求1--> S1 (Servlet) S1 --HTTP請求2--> S2 (另一台機器) S2 --響應2--> S1 S1 --響應1--> Client
@WebServlet("/proxy")
public class ProxyServlet extends HttpServlet {
private final HttpClient httpClient = HttpClientBuilder.create().build();
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
try {
// 1. 構建向 S2 的請求
HttpGet get = new HttpGet("https://remote-host:8080/api/data");
// 可轉發客戶端參數
String param = req.getParameter("param");
if (param != null) get.setURI(new URI(get.getURI() + "?param=" + param));
// 2. 執行並獲取響應
HttpResponse response = httpClient.execute(get);
String body = EntityUtils.toString(response.getEntity());
// 3. 返回給客戶端
resp.setContentType("application/json");
resp.getWriter().write(body);
} catch (Exception e) {
resp.setStatus(502);
resp.getWriter().write("Upstream error: " + e.getMessage());
}
}
}