首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 基礎實戰:用 Servlet 實作簡易 HTTP 代理伺服器

     編輯:Java 相關知識

透過 Servlet 實作 HTTP 代理,核心邏輯:接收請求參數 URL,解碼後建立 java.net.URL 連線,以 BufferedReader 讀取遠端回應逐行輸出至客戶端。適合學習 Servlet I/O 與網路程式基礎。

完整程式碼

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Proxy extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String query = null;
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        query = request.getParameter("URL");
        if (query == null) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing URL parameter");
            return;
        }
        try {
            query = URLDecoder.decode(query);
        } catch (Exception exception) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "URL decode error " + exception);
            return;
        }
        try {
            URL url = new URL(query);
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            while ((line = in.readLine()) != null)
                out.println(line);
            out.flush();
        } catch (IOException exception) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception: " + exception);
        }
    }
}

關鍵點提示

  • 參數傳遞:https://host/Proxy?URL=encoded_target_url
  • 錯誤處理:缺參數回 400、解碼失敗回 400、連線失敗回 404。
  • 編碼:使用 URLDecoder.decode 還原目標 URL。
  • 串流複製:InputStreamReader + BufferedReader 逐行讀寫,簡單但非高效(生產環境建議用 NIO/非同步)。
  • 擴展方向:支援 POST、標頭轉發、HTTPS、快取、存取控制、內容過濾。

此範例展示 Servlet 作為網路中介的基本形態,是理解代理模式、Servlet 串流處理與異常捕獲的優良入門教材。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved