首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Servlet 訪問另一台機器的實現思路

     編輯:程式設計疑難解答

架構模式

典型的代理/聚合模式:客戶端 → Servlet(S1) → 遠程服務(S2) → 返回響應。

流程圖解

Client --HTTP請求1--> S1 (Servlet)
S1 --HTTP請求2--> S2 (另一台機器)
S2 --響應2--> S1
S1 --響應1--> Client

核心代碼(S1 中發起 HTTP 請求)

@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());
        }
    }
}

關鍵點

  • 使用成熟 HTTP 客戶端(Apache HttpClient / OkHttp),管理連接池、超時、重試。
  • 注意超時設置:連接超時、讀取超時,防止阻塞 Servlet 線程。
  • 錯誤處理:區分上游錯誤(5xx)與網絡故障,返回合適狀態碼。
  • 安全性:校驗輸入參數,防止 SSRF 攻擊(限制目標主機白名單)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved